c語言中,為什麼字串可以賦值給字元指標變數

2021-03-11 05:38:51 字數 2721 閱讀 1678

1樓:匿名使用者

在c語言中並沒有bai

字串這個型別

du。所說的字zhi符串就是字元dao陣列。也就是char型別版的陣列。

與普通陣列不同的,權字串必須以'\0'作為結束符。

而在c語言中,型別為t的一維陣列,其首地址等效於該型別的一維指標,即t*型。

於是字串,也就是字元陣列,首地址就可以當做char *型使用了。

事實上,在庫函式以及大多數使用到字串作為引數的函式中,其引數都是char *型的。

2樓:路圖元

p="abcd"; //這句話的意思是把字串的首地址賦給p!

3樓:匿名使用者

單引號和雙引號,賦值的時候這個應該有講究吧!具體忘了,幾年沒去看了。

4樓:土杜土杜

p = "abcd"; 編譯器會將字串"abcd"的地址放到指標變數p中。p存放的是它的地址,不是值。

5樓:棄嬰

字串常量賦值給指標變數應該就是把它的首地址賦給指標變數吧 。

6樓:五轉故劍情深

1. 'a'是字元

常量,bai"a"是字元字面量,一個du加zhi單引號一個加雙引號,是兩個不dao同的東西不要版搞混了

2.1 字元常量'a'使用整數(字符集

權的數值碼)表示,最常用的字符集是ascii碼,在ascii碼中,字元'a'的值為97,這也是為什麼字元可以作加減法運算和比較

2.2 字串字面量"a",在c語言中作為陣列來處理,既然如此,編譯器就會把它看作是char *型別的指標。題幹中p = "abcd"其實是將"abcd"首個字母的地址賦值給了字元指標變數p,或者說p指向了字串字面量"abcd"的第一個字元

2.2.1 c語言編譯器處理長度為n的字串字面量時,會為其分配長度為n+1的記憶體空間,第n+1個位置存放額外追加的空字元(字串結束的標誌)

7樓:

要理解 你要知道 字串copy 幹什麼了 雙引號 做了3件事

1.申請了空間,存放了字串

2. 在字串尾加上了'/0'

3.返回地址

你這裡就是 返回的地址 賦值給了 p 希望採納~~~~~~~~~~~~~~~~

c語言中,為什麼不能對字元指標變數指向的字串再賦值?

8樓:大野瘦子

因為抄c語言中,凡是以""括住的形式直接出襲現,而且你又沒有為其分配記憶體空間的字串都是常量字串,是不能修改其值的。

這樣:char a[6]="hello";

a[2]='c';

就可以了。

這裡你為hello分配了一個長度為6的字元陣列空間來存放。

9樓:種令芮德曜

char*

a=為什麼不能修改,這個要涉及程序佔用的記憶體分段,大概分為**區,只讀

區,全域性區專,堆屬區,棧區。"hello"作為一個字串字面值,是被放在只讀區,只讀顧名思義就是不能修改的。char*

a="hello",相當於把hello的地址賦給了a,故而不能對a指向的內容進行修改。char

a="hello",這樣賦值的就是一個字元陣列。字元陣列a是在棧區裡申請的一個空間給a,然後把只讀區的"hello"進行了一次複製再賦值給a,這樣a的指向是能修改的。

10樓:匿名使用者

c primer plus 一書中寫到:「內容」為字串面量,其被視為常量,故無法再進行修改。只能對其指標的值(改變位置)進行修改,不能改變其內容。

11樓:

這不是絕對的:

bai當指du

針指向的字串是zhi常字串時當然不能再賦dao值,因為目標是「常量專」,而當指標

屬指向的字串不是常字串時就可以再賦值,比如用動態申請記憶體方法建立的字串。具體說就是用char *p="abcqer12345";這種方法定義字串是不能通過指標改變內容的,原因是這個定義確定了abcqer12345是字串常量——因為char *p="abcqer12345";被編譯器解釋為「建立一個字串常量abcqer12345,並把它的首地址(就是a的地址)賦給char *型指標p」——既然是「常量」,自然就不能更改。

12樓:匿名使用者

c語言bai中,凡是以""括住的形式直du接出現,而且你zhi又沒有為其分配內dao

存空間的字

符串專都是常量字串,是屬不能修改其值的。

char a[6]="hello";

a[2]='c';

就可以了。這裡你為hello分配了一個長度為6的字元陣列空間來存放。

13樓:匿名使用者

char *a="hello";

''hello''是常量,所以a指向的是常量區,不能對於常量區的元素進行賦值

14樓:匿名使用者

char *a="hello";這個形式的定義是屬於字串常量,不可以修改的.

15樓:匿名使用者

不能修改!

char *p="hello";

相當於 const char *p="hello"

以這種方法初始化的字串是常量字串,而系統預設對常量賦初值後,其值無法被修改,否則會報錯,所以不能修改。

c語言中字串如何轉為整型數值,C語言中 字串如何轉為整型數值

在c語言中將字串轉化成整型有兩種方法。1 用atoi函式。atoi的功能就是將字串轉為整型並返回。其宣告為int atoi char str 比如atoi 1234 會返回整型1234。要呼叫atoi,需要引用標頭檔案stdio.h2 用sscanf。sscanf與標準格式化輸入函式scanf類似,...

C語言中字串常量和字元常量的區別

字元常量是單引號中的,在ascii表中有對應編號,字串是雙引號中的,單引號是字元常量 雙引號是字串常量 字串常量是一個或多個字元組成的常量 比方說一個字串常量a 給它的初始值是 abc123 可以是一個字元 5 構成但是字元常量只能是一個字元 比方說一個字元常量 a它的初始值為 1 不能多於一個字元...

c語言字串陣列的問題C語言字串陣列的問題

include int main scanf s a for i 0 a i 0 i for j 0 j 5 j 修改 1 下標從0 4,共5個 return 0 每行結尾的 僅僅是為了連線字串使用的,如果一個字串過長,寫在一行比較不合適,就在該行結尾處加上一個反斜槓 就可以在下邊的行繼續寫這個字串...