1.以字串形式出現的,編譯器都會為該字串自動添
加乙個0作為結束符,如在**中寫
"abc",那麼編譯器幫你儲存的是"abc\0"
2."abc"是常量嗎?答案是有時是,有時
不是。當賦予陣列時不是常量,例如,char
str
= "abc"的最終結果是
char
str[4]
= ;str[0]='v'//正確
賦予char*時"abc"型別是(const char*)
例如,char* p="abc",p[0]='v'//編譯錯誤 3
.陣列的型別是由該陣列所存放的東西的型別以及陣列本身的大小決定的。
如char s1[3]和char s2[4],s1的型別就是char[3],s2的型別就是char[4],
也就是說儘管s1和s2都是字元陣列,但兩者的型別卻是不同的。
4.字串常量的型別可以理解為相應字元常量陣列的型別,
如"abcdef"的型別就可以看成是const char[7]
5.sizeof是用來求型別的位元組數的。如int a;那麼無論sizeof(int)或者是sizeof(a)都
是等於4,因為sizeof(a)其實就是sizeof(type of a)
6.對於函式引數列表中的以陣列型別書寫的形式引數,編譯器把其解釋為普通
的指標型別,如對於void func(char sa[100],int ia[20],char *p)
則sa的型別為char*,ia的型別為int*,p的型別為char*
3.結論
對於cha
r str[
] =
"abcdef
";就有sizeo
f(str)
== 7,因為st
r的型別是char
[7],
也有sizeof("abcdef")
== 7,
因為"abcdef"的型別是const
char[7]
。對於char
*ptr
= "abcdef";就有sizeof(ptr)
== 4,
因為ptr的型別是char*。
對於char
str2[10]
= "abcdef";就有sizeof(str2)
== 10,因為str2的型別是char[10]。
對於void
func(char
sa[100],int
ia[20],char
*p);
就有sizeof(sa)
== sizeof(ia)
== sizeof(p)
== 4,
因為sa的型別是char*,ia的型別是int*,p的型別是char*
常量,字串常量
對於普通變數常量 常量摺疊 是 就是在編譯器進行語法分析的時候,將常量表示式計算求值,並用求 得的值來替換表示式,放入常量表。可以算作一種編譯優化 include void main 輸出 3 2 我只是改了這個位址內容,但是e還是2,因為編譯器在優化的過程中,會把碰見的const全部以內容替換掉 ...
字串常量
1.當乙個字串常量出現於表示式中時,它的值是乙個指標常量。編譯器被這些指定字元的乙份拷貝儲存在記憶體的某個位置,並儲存乙個指向第乙個字元的指標。陣列名用於表示式中時,它的值也是指標常量 2.xyz 1 因為字串常量實際上是個常量指標,這個表示式計算 指標值加上1 的數值。它的結果是個指標,指向字串中...
字串常量
來自 常量字串為什麼位於靜態儲存區?char c chenxi 書上說 chenxi 這個字串被當作常量而且被放置在此程式的記憶體靜態區。那一般的int i 1 1也是常量,為什麼1就不被放置在此程式的記憶體靜態區了呢?請高手指點!所有的字元竄常量都被放在靜態記憶體區 因為字串常量很少需要修改,放在...