這兩行代碼有什么區別? 從語法層面上講,上面的是指針,下面的是數組,但是想要搞清楚他們的區別,還得知道他們在內存中怎么存儲的。
操作系統中,每個進程在啟動的時候都會被分配一塊虛擬地址空間,這塊空間包含數據段、代碼段、堆、棧等等。
char*s="helloworld";s 屬于棧空間,在 64 位系統中占 8 個字節。
"helloworld" 我們把它稱作字符串常量,存放在只讀數據區。
既然是只讀數據,那么它一定不能修改。
所以這條語句涉及兩塊內存,棧空間的指針指向只讀數據區。
?
s 指向字符h,如果s++,那么就指向字符e。
?
但是因為"helloworld"是只讀數據,所以 *s 不能修改,比如:
*s = 'a';運行會出錯。
char s[] = "helloworld";s 是一個數組,"helloworld"用于初始化數組。 數組存放在棧空間,算上字符串后面的?,數組占 11 個字節。 既然是棧空間的數據,我們就可以通過數組名去修改,比如:
s[0] = 'a';就是把字符 h 改成了 a。 但是由于數組名是常指針,表示的是數組首元素的地址,所以數組名不好修改。
s++;會在編譯的時候直接報錯。 要說他們倆有什么聯系,指針可以用下標去訪問,數組也可以當作指針來使用。
char *s1 = "helloworld"; printf("%c ",s1[1]); char s2[] = "helloworld"; printf("%c ", *(s2 + 1));
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
字符串
+關注
關注
1文章
584瀏覽量
20553 -
虛擬地
+關注
關注
0文章
2瀏覽量
5497
原文標題:char *s 和 char s[] 的區別
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
error: incompatible types when assigning to type ‘char[20]’ from type ‘char **’
#include#include#if 1char *GetSrand(char s[][20],int len){int a = len;srand(time(0));return s
發表于 07-07 17:46
bit和int char基本認識及區別
bit和int char之類的差不多,只不過char=8位, bit=“1位而已”。都是變量,編譯器在編譯過程中分配地址。除非你指定,否則這個地址是隨機的。這個地址是整個可尋址空間,RAM+FLASH+擴展空間。bit只有0和1兩種值,意義有點像Windows下VC
發表于 08-06 08:00
?11次下載
char *和char數組的區別及內核訪問用戶區
abcd 和ABCD了,這是為什么?實際上,char *只是一個指,僅僅是一個unsigned long,那么我們看看pa1,內存中實際就8個字節(32位機器),兩個指針,一個4個字節,我們傳入send
發表于 04-02 14:36
?3168次閱讀
浮點數在內存中的存儲
浮點數在內存中的存儲和整數不同,因為整數都可以轉換為一一對應的二進制數據。而浮點數的存儲是由符號位 (sign) + 指數位 (exponent) + 小數位 (fraction) 組
char 與unsigned char在嵌入式開發中的區別
嵌入式中數據采集的最小單位為8bit或者8bit的倍數,在嵌入式中char buf[ ]指的就是字符串,也就是所謂的字符空間,轉換成ascii碼是有符號數unsigned char b
發表于 11-03 10:06
?9次下載
51單片機 對 char 反序列輸出,以及注意事項
反序列輸出 意思是 比如數值 0xaa (二進制 1010 1010),輸出為 0x55(二進制 0101 0101).先上函數unsigned char Reverse(unsigned
發表于 11-23 16:20
?8次下載
MCU_C語言中 數組型指針 的應用 -- char (*stringp)[]
定義一個指向數組的指針stringpchar (*stringp)[];取得某個數組的地址 :char *dst = &string[10];指針指向該數組的某個位置:stringp = (char (*)[])dst;
發表于 11-29 18:06
?2次下載
字符型char和整型int之間的關系
)有符號的字符表示-128127,無符號字符表示0255。char相當于signed char還是unsigned char取決于編譯器。字符型數據在內存
發表于 01-13 15:22
?1次下載
S71200:char和string的定義
數據類型為 char (Character) 的變量長度為 8 bit 位,占用1個 byte 的內存。char 數據類型將單個字符存儲為 ASCII 編碼形式。
char和string在西門子PLC中的格式
數據類型為 char (Character) 的變量長度為 8 bit 位,占用1個 byte 的內存。char 數據類型將單個字符存儲為 ASCII 編碼形式。
char和string在西門子PLC中的格式
數據類型為 char (Character) 的變量長度為 8 bit 位,占用1個 byte 的內存。char 數據類型將單個字符存儲為 ASCII 編碼形式。
如何將QString轉成char
注意的是,如果轉換類型是const char *盡管用data()不會出錯,會給你自動轉換,但是還是不建議,因為深拷貝了一份,理論上增加了內存開銷,如果字符串長度小還好,一旦很長,這個開銷挺大,這是個好的編程
oracle中to_char用法
to_char是Oracle數據庫中的一個函數,用于將不同類型的數據轉換為字符類型。 to_char函數的基本語法: to_char(表達式,格式模型) 首先,to_
評論