指標,陣列,sizeof

2021-08-31 10:47:12 字數 817 閱讀 2470

已知 char *str1="absde";

char str2="absde";

char str3[8]=;

char ss = "0123456789";

sizeof(str1)=4

sizeof(str2)=6;

sizeof(str3)=8;

sizeof(ss)=11

首先說明一點,char型別佔乙個位元組,所以sizeof(char)是1,這點要理解

str1是乙個指標,只是指向了字串"absde"而已。所以sizeof(str1)不是字串佔的空間也不是字元陣列佔的空間,而是乙個字元型指標佔的空間。所以sizeof(str1)=sizeof(char*)=4,在c/c++中乙個指標佔4個位元組

str2是乙個字元型陣列。c/c++規定,對於乙個陣列,返回這個陣列佔的總空間,所以sizeof(str2)取得的是字串"absde"佔的總空間。"absde"中,共有a b s d e \0六個字元,所以str2陣列的長度是6,所以sizeof(str2)=6*sizeof(char)=6

str3已經定義成了長度是8的陣列,所以sizeof(str3)為8

str4和str2類似,'0' '1' ... '9'加上'\0'共11個字元,所以ss佔的空間是8

總之,對於指標,sizeof操作符返回這個指標佔的空間,一般是4個位元組;而對於乙個陣列,sizeof返回這個陣列所有元素佔的總空間。char*與char容易混淆,一定要分清,而且char*="aaa"的寫法現在不被提倡,應予以避免

而strlen不區分是陣列還是指標,就讀到\0為止返回長度。而且strlen是不把\0計入字串的長度的。

sizeof 陣列 指標

千萬不要把陣列名看成指標,儘管有些時候他們是相通的,但也僅限某些時候而已。sizeof是乙個奇特的函式,告訴你你也許不相信 sizeof在編譯的時候就已經確定sizeof的結果了,這有點類似於巨集。char str hello sizeof str 6 編譯器編譯的時候根據上下文完全知道str是乙個...

sizeof 陣列與指標

注 本文摘自csdn論壇的乙個回帖,個人覺得看完之後豁然開朗,於是轉貼於此。位址為 http topic.csdn.net u 20081016 23 6b46dc63 b0d7 4dad 806f e8cd48a2208b.html 千萬不要把陣列名看成指標,儘管有些時候他們是相通的,但也僅限某些...

sizeof 陣列名 和sizeof 指標

在做這道題時 32位環境下,int p new int 10 請問sizeof p 的值為 a 4 b 10 c 40 d 8 我以為正確答案為c,int型別為32位,佔四個位元組,10個自然就是40了,結果正確答案為a,只是指標p佔的空間。因此寫段 測試一下 cpp view plain copy...