[問題] 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