[问题] pointer_array size的问题

楼主: kdok123 (小天)   2014-10-25 20:56:08
void test(char *a)
{
cout << sizeof(a) << endl;// 4
cout << strlen(a) << endl;// 5
}
int main()
{
char a[] = "12345";
cout << sizeof(a) << endl; // 6
cout << strlen(a) << endl; // 5
return 0;
}
问题:
函数里面的*a(或者是a[],抑或是a[6]),算出来的sizeof(a)一定都是4(pointer的大小)
但是在main函数里的sizeof(a)却跟长度有关(a不也是指向a[0]的pointer吗?)
而strlen不论在main或是在test均可接到矩阵长度
目前是有点背的方式,strlen的处理不分函数位置
而sizeof只有在当下的函数里才有效,传出去的都是pointer
请问这边有什么观念可以补充的吗?
作者: carylorrk (carylorrk)   2014-10-25 21:00:00
type 的观念。 array type 和 pointer 是不同的 type只是在某些时候(ex: pass to function) array 会 decay成 pointer。 sizeof 是 operator,所以他在 main 接收到的是还有 length 资讯的 array type 作为 operand在 test function 里则是一个 char* type虽然 strlen 是个 function,但是他单纯就是计算字数直到 '\0',所以不管在哪得到的都一样。
作者: iamnumbea1 (NULL)   2014-10-25 22:28:00
在64bit下 4应该会变成8
作者: bluesoul (忙死你老爸)   2014-10-26 23:48:00
在main里头,a是array喔,并不是pointer
作者: jammy50605 (小刀)   2014-10-27 01:08:00
把阵列名称当参数 一律传的都是pointermain里面你a宣告的是阵列 当然sizeof是阵列大小
楼主: kdok123 (小天)   2014-10-27 09:40:00
恩恩! 我了解了! 感谢!

Links booklink

Contact Us: admin [ a t ] ucptt.com