1樓:我愛木木
char型別
, 一半情況下佔用8位,分為signed和unsigned,在計算機中全都以ascii值表示,signed]char 有符號字元型 長度(位元組)為1 -128~127
unsigned char 無符號字元型 長度(位元組)為1 0~255
書中基本只給到0~127
//char c ='a';
char c ;
c = 'a';
2樓:匿名使用者
像'a'這樣單一字元的資料
char a ='s';
c語言中字元陣列和字元指標的問題
3樓:千鋒教育
在函式內 char陣列被定義成局
部變數,函式執行後會被系統給釋放掉。 但char*p 則是定義成一個常量,程式執行完後才會釋放掉。所以在返回char p 時會返回亂碼,但 char*p 則可以全部顯示出來
當然 char 也可以定義成靜態變數 這樣就可以顯示出來了不如static char p="hello";
4樓:匿名使用者
未修改之前char p = "hello world";中的字串"hello world"空間開闢在在動態變
量區(棧上),而該動態變數是區域性的,函式結束時不保留的。
把char p="hello world"改成char *p="hello world"; 後,字串"hello world"不是變數,而是一個常量,編譯程式在處理這種常量時,通常把它放在了常量區中。而常量區則是始終存在的。
所以返回首地址後,在外部還可以繼續訪問該常量,所以就能列印出來。
函式返回指標,要使主程式可以使用這個指標來訪問有意義的資料,關鍵就是要保證在使用這個指標值的時候,該指標所指向的地方的資料仍然有意義。
還有,如果指標是指向函式的指標,那麼這個指標就是指向程式**區的。這也是一種應用的情況。
另外,如果明白了它的原理,程式設計師還可以發明出一些其他靈活的使用方法,當然,那都屬於「怪」方法,一般不提倡的。
5樓:匿名使用者
指標本身沒什麼生存期,它指向的記憶體的內容才有生存期。
換成char *p="hello world"之後,之所以可以正常輸出「hello world」,我的理解是,編譯器在靜態儲存區申請了一段記憶體,就算getmemory返回了,這段內容依然有效,所以能正常輸出。
而char p="hello world",p指向的是棧,函式返回這段記憶體就會無效。
6樓:
贊同jzp1的分析,我再舉個jzp1說的不規範的使用方法,該返回一樣可以列印出字串:
char *getmemory(void)
int main(int argc, char* argv)
7樓:
是相等的,你這裡後面那個問題可以正常輸出是因為hello world是個字串常量,不再是儲存在棧記憶體裡面。
8樓:水閣公子
兩個字串被放在不同的區內,一個在棧區,一個在字串常量區,棧區的隨函式呼叫結束而消失,常量區,一般是跟這個程序的生命一致。
9樓:匿名使用者
函式也是個作用域,如果是棧儲存的,出了這個作用域,自然會釋放,不論是指標、陣列還是變數
10樓:匿名使用者
也許在函式返回時把函式中生成的陣列所佔用的空間收回或者覆蓋了別的內容。
而僅僅是指標指向的地址可能不在棧上開闢,那麼即使函式中定義的指標被**了,該指標指向的地址也沒有**。你可以程式設計試試。那個p指標所在的地址肯定**了,但是p指標指向的地址可能沒有**或者**了沒有覆蓋它。
要麼是'\0'的問題,加個'\0'試試看。
關於c語言字元型,C語言中關於字元型變數。
關於printf c a i 如果把他換成printf s a i 為什麼不能編譯?回答 編譯應該沒問題,只是執行時必定錯誤.字串指一串連續的字元型的儲存域.c語言的字串在操作時一般以0值字元標誌字串的尾字元 佔一個字元的儲存域,但不計入字串長度 c 應該對應於字元型變數 當然字串中的一個字元也可以...
c語言中如何判斷輸入的是字元還是數字
可以使用 進行判斷 include intmain return0 擴充套件資料c語言判斷輸入是否是數字 intdigit printf pleaseinputainteger n intret scanf d digit if 0 ret 1 可以用sa f或gets函式直接接收輸入的字串,然後用...
C語言中double和int型的資料之間可相互賦值嗎
可以。如 double a 1.2 int b b a b 1 取整了 int a 1 double b b a b 1.00000 c語言中double 和int型的資料之間可相互賦值?可以。如 double a 1.2 int b b a b 1 取整了 int a 1 double b b a...