s*****k 发帖数: 604 | 1 有两个变量
char a[] = "Hello";
char *b = "Hello";
稍微了解指针和数组差别的人可以都知道这个区别
sizeof(a) = 6;
sizeof(b) = 4;
如果有这样一个函数,
void siz(char a[100])
{
printf("%d\n", sizeof(a));
}
请问调用这个函数为什么输出是 4? |
f******y 发帖数: 2971 | |
s*****k 发帖数: 604 | 3 没加优化参数
【在 f******y 的大作中提到】 : 是不是compiler优化的原因?
|
d******a 发帖数: 238 | 4
了解指针和数组差别的人也应该知道第二个原因啊。
当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针啊。
【在 s*****k 的大作中提到】 : 有两个变量 : char a[] = "Hello"; : char *b = "Hello"; : 稍微了解指针和数组差别的人可以都知道这个区别 : sizeof(a) = 6; : sizeof(b) = 4; : 如果有这样一个函数, : void siz(char a[100]) : { : printf("%d\n", sizeof(a));
|
s*****k 发帖数: 604 | 5 多谢。我还真不知道。以前用一个基于C的离散事件模拟的语言(先翻译成C再编译),
那里面
数组传递的时候就是拷贝整个数组的, 所以我以为C里面也是这样的。
【在 d******a 的大作中提到】 : : 了解指针和数组差别的人也应该知道第二个原因啊。 : 当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针啊。
|
b*******a 发帖数: 68 | 6 函数参数里的数组如指针等价,即以下相同 (那个100没什么用用,直接忽略,一般别
这么写,没用,因为compiler/runtime不检查,而且confusing):
void foo(char *p)
void foo(char p[])
void foo(char p[100])
【在 s*****k 的大作中提到】 : 有两个变量 : char a[] = "Hello"; : char *b = "Hello"; : 稍微了解指针和数组差别的人可以都知道这个区别 : sizeof(a) = 6; : sizeof(b) = 4; : 如果有这样一个函数, : void siz(char a[100]) : { : printf("%d\n", sizeof(a));
|