你讲的 我能理解
但我想知道能否通过函数调用也可以去实现求数组的长度————能不能 谢谢啦 |
|
40分 |
把数组地址传给函数在函数里面是无法计算出数组大小的,因为函数的形参不管定义成数组或者指针,其本质都是指针,所以在函数里面用sizeof计算出来的是指针的大小,而不是数组的大小。 |
一般这样,void fun(int *arr, int n); //n是数组的大小 |
|
当然可以的啊。。
len = sizeof(a) / sizeof(&a[0]) |
|
数组作为参数传递给函数退化为指针,所以无法用函数来求数组的长度。
|
|
终于有人懂我的意思了————————-你能确定不行 |
|
正规的C语言 对于int L(int *t)是绝对不可能获得t数组的长度的。
在C实现中,只能用替代办法。 |
|
C++中的数组不记录数组长度的,通常想把一个数组传入函数,还需要传入这个数组的长度
除非你自己写一个类来管理,类似标准模板库中的string类管理char数组 |
|
# include <stdio.h> int n; void f (int a [n]); int main (void) { int a [n = 3]; a [0] = 1; a [1] = 3; a [2] = 5; f (a); } void f (int a [n]) { /* **在这里,a依然被转换为指针,但传递进来的n可以使用。 **数组的大小在它在存续期间不会改变,即使改变了n的值。 */ while (n --) printf ("%d\n", a [n]); } |
|
纠正一下措辞,不是传进来的喔。
|
|
只能传数组地址,函数是求不出来长度的。
|
|
是C10的新特性?C89和C99里没有吧? |
|
C99的,不过跟你的问题关系不大,我写着玩的。 |
|
C里面真不行 |
|
# include <stdio.h> void f (int a []) { printf ("%d\n", * a); printf ("%d\n", a [1]); } int main (void) { /* 俺决定用数组第一个元素来存放数组大小,嘎嘎!*/ int a [3] = {sizeof a,}; f (a); } |