[問題] pointer_array size的問題

看板C_and_CPP (C/C++)作者 (小天)時間11年前 (2014/10/25 20:56), 11年前編輯推噓3(309)
留言12則, 5人參與, 最新討論串1/1
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 請問這邊有什麼觀念可以補充的嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1414241770.A.C43.html ※ 編輯: kdok123 (140.112.25.105), 10/25/2014 20:58:35

10/25 21:00, , 1F
type 的觀念。 array type 和 pointer 是不同的 type
10/25 21:00, 1F

10/25 21:00, , 2F
只是在某些時候(ex: pass to function) array 會 decay
10/25 21:00, 2F

10/25 21:01, , 3F
成 pointer。 sizeof 是 operator,所以他在 main 接收
10/25 21:01, 3F

10/25 21:02, , 4F
到的是還有 length 資訊的 array type 作為 operand
10/25 21:02, 4F

10/25 21:03, , 5F
在 test function 裡則是一個 char* type
10/25 21:03, 5F

10/25 21:03, , 6F
雖然 strlen 是個 function,但是他單純就是計算字數直
10/25 21:03, 6F

10/25 21:04, , 7F
到 '\0',所以不管在哪得到的都一樣。
10/25 21:04, 7F

10/25 22:28, , 8F
在64bit下 4應該會變成8
10/25 22:28, 8F

10/26 23:48, , 9F
在main裡頭,a是array喔,並不是pointer
10/26 23:48, 9F

10/27 01:08, , 10F
把陣列名稱當參數 一律傳的都是pointer
10/27 01:08, 10F

10/27 01:09, , 11F
main裡面你a宣告的是陣列 當然sizeof是陣列大小
10/27 01:09, 11F

10/27 09:40, , 12F
恩恩! 我了解了! 感謝!
10/27 09:40, 12F
文章代碼(AID): #1KIvtgn3 (C_and_CPP)
文章代碼(AID): #1KIvtgn3 (C_and_CPP)