在 C 語言中,有兩種表示字符串的方法
- 字符串?dāng)?shù)組 char str[6]="123456";
- 字符串常量 char *str="123456";
字符數(shù)組
#include <stdio.h>
int main(int argc, const char * argv[]) {
char str[6]="123456";
//%x ,十六進(jìn)制
printf("%x\n",&str);
printf("%x\n",str);
printf("%x\n",&str[0]);
return 0;
}
輸出結(jié)果如下:
5fbff849
5fbff849
5fbff849
| 表達(dá) | 解釋 |
|---|---|
| &str | str[6]=...時(shí)已為分配了6字節(jié)的內(nèi)存地址給 str 數(shù)組,打印出的是首字符的內(nèi)存地址 |
| str | 可以理解成數(shù)組變量退化的指針,并且指向數(shù)組的開頭 |
| &str[0] | 數(shù)組中第一個(gè)字符的內(nèi)存地址 |
字符串常量
#include <stdio.h>
int main(int argc, const char * argv[]) {
char *str;
str="123456";
//
//等價(jià)
//char *str="123456";
//
printf("%x\n",&str);
printf("%x\n",str);
printf("%x\n",&str[0]);
return 0;
}
輸出結(jié)果如下
5fbff848
f92
f92
| 表達(dá) | 解釋 |
|---|---|
| &str | char *str="123456" , 聲明了一個(gè) char 類型的指針變量,該指針指向存放"123456"內(nèi)存地址,所以該指針變量的地址跟下面兩個(gè)不一樣 |
| str | 指針變量所指地址空間的內(nèi)存地址 |
| &str[0] | 數(shù)組中第一個(gè)字符的內(nèi)存地址 |
區(qū)別
| 方式 | 存儲(chǔ)位置 | 權(quán)限 |
|---|---|---|
| 字符數(shù)組 | 全局?jǐn)?shù)據(jù)區(qū)或棧區(qū) | 讀取,寫入 |
| 字符串常量 | 常量 | 讀取 |