關於c語言中字串指標變數的問題

2021-05-09 21:05:22 字數 5535 閱讀 2796

1樓:未來需努力點綴

樓主你好

字元指標ps賦值後是字串"this is a book"的首地址 也就是說此時ps指向第一個字元't'

*ps就是't'

n=10;

ps=ps+n;

就是使指標ps指向字串"this is a book"的第11個字元 也就是'b'

那麼printf("%s\n",ps);

就是輸出以ps為首的 以'\0'結束的字串"book"

希望能幫助你哈

2樓:home莫雨

字元指標ps賦值後是字串"this is a book"的首地址 也就是說此時ps指向第一個字元't'

*ps就是't'

n=10;

ps=ps+n;

就是使指標ps指向字串"this is a book"的第11個字元 也就是'b'

那麼printf("%s\n",ps);

就是輸出以ps為首的 以'\0'結束的字串"book"

ps 是一個指標,指向那個字串,後來指標+10,所以就指到了後面的字元

3樓:匿名使用者

這裡沒有型別轉換的內容,指標就是存放地址的,

你執行char *ps="this is a book"語句時,系統將字串第1個地址存放

到ps變數中,後面讓這個地址自加10個位元組,於是地址是字串中b的地址.

printf語句的意思就是列印從某個地址開始的字串,直到字串結尾.

無論ps指向字串還是其他的資料型別,printf都會把這個地址開始的資料

當成字串來列印.

字串指標變數的意思就是你在ps=ps+n;時加的是n個字元的地址,如果

ps定義成int *型的,假設int佔4個位元組,ps=ps+n;那麼ps中存放的地址就會

加10*4而不是10*1了.

總之,字元型指標不一定就指的是字元,它指向誰不會有強制型別轉換的

動作發生.

4樓:匿名使用者

這個指標型變數的內容並不是"this is a book" 而是"this is a book"的第一個字元的地址付給ps,在print的時候,系統先輸出它所指向的第一個字元資料,然後自動使ps加1,直到'\0'結束。

5樓:匿名使用者

ps 是一個指標,指向那個字串,後來指標+10,所以就指到了後面的字元

關於c語言中指標與字串的一個問題

6樓:匿名使用者

這是因為printf語句中使用%s輸出時,需要提供一個指向字串開始位置的指標,你給出的str變數儲存了這個指標

如果你要用%c輸出這個str指向的那個字元,就需要用*str了,因為str是定義成char *型別的,這個指標指向的資料的型別是字元型的

c語言字串指標問題

7樓:過雲回青易

在編譯期間,編譯器得到的結果是,指標a和b指向的是靜態區間,這段區域是不能隨意改變的,而在後續的

while(*p2++=*p1++);中,卻給p2也就是b賦值了,這樣會出錯的,如果一定要做這樣的功能,建議在開始宣告兩個字串的時候,用chara

8樓:匿名使用者

這裡"hello"是一個sz字串,你可以把它看坐是一個字元陣列陣列裡有7個元素'h','e','l','l','o','/','0',p就是指向這個陣列首地址的指標,所以p裡面存的是這個陣列的首地址,使用的時候p依次加1,就可以取得裡面所有字元。或者用printf(“%s”,p);直接輸出一個sz字串

9樓:

hello雖然是常量字串,但是它需要儲存記憶體的棧上,指標p指向該常量字串的記憶體首地址

10樓:匿名使用者

你這樣等於把hello當地址付給了p 所以p就是指向字串的第一個地址'h', c語言裡面可以把字串當地址給指標 而且字串地址就是本身它自己 這也就是 *p輸出的是'h' 了

但p=‘h’就另當別論了 *p就可能是其他了 沒定義字元地址就是它自己 在c++中可能根本不允許 char *p='h';

11樓:匿名使用者

首先,指標不是地址。p是指標變數,這個變數是記憶體中的一塊空間,可以用來儲存資料,但是要求這個資料——必須是字串“型別”的地址,才可以存放。“hello”,在c語言中不是字元,而是字串,儲存字串“型別”可用char×。

12樓:匿名使用者

讓p指向常量字串hello的首地址,即p中存hello的第一個字元在記憶體中的地址,p="hello";

就等於把字串首地址賦給了指標變數p

希望能夠幫到您

補充您的提問如下:

這雖是一個賦值表示式,但不是把內容hello賦給指標p,p的內容仍是地址,是字串hello的首地址,實際上此表示式就是把字串首地址賦給p,讓p指向常量字串hello的記憶體單元,就是這個意思,有點繞,希望您明白了。

13樓:匿名使用者

指標當然也需要地址來儲存,但是指標儲存的內容是記憶體地址而已

14樓:匿名使用者

p指向字串的首地址,即'h'

15樓:

兩種都是說明字串變數的的辦法

char *p 表示p是一個指向某個字串首地址的指標,但此時該字串還不存在,也沒分配空間

p=“hello” 可以理解為p是一個字串變數,但該字串已經分配空間

還可以這樣定義:

p[5+1]=;

兩者的一些區別:

對於char *p 來說

*p = “hello”; 合法

strcpy(p,"hello"); 非法gets(p); 非法

對於p[5+1]=;或(p="hello";) 來說p=“hello” 非法

strcpy(p,"hello"); 合法gets(p); 合法

16樓:貧寒烏鴉

這裡是定義了一個字元指標p,再將字串常量"hello"的第一個元素的地址(即存放字串的字元陣列的首元素地址)賦值給它。如果誤認為是將這個字串賦值給他是不對的,以上的語句等同於:

char*p="hello";

這裡是初始化。

可以看到p被定義為一個指標變數,指向字元型資料,輸出時,要用:

printf("%s\n",p);

在輸出時,系統先輸出它指向的一個字元資料,然後自動使p加1,使之指向下一個字元,然後在輸出一個字元···如此直到遇到字串結束標誌'\0'為止。

說明:通過字元陣列名或字串指標變數可以輸出一個字串,而對一個數值型陣列,是不能企圖用陣列名輸出他的全部元素的。

具體的可以參考譚浩強編寫的《c語言程式設計》一書,上面有詳細的介紹。

17樓:匿名使用者

"hello"是字串

18樓:滄海笑蝸牛

看書去吧 這是c語言基礎!

19樓:甕友英麗

你好!p記錄的其實是"iama

good

boy"字串的首地址,呼叫printf函式時,傳遞的是p(字串的首地址),printf函式的實現部分按字串首地址依次搜尋出字串的字元,直到遇到‘\0’停止!

純手打,請給分,謝謝!

關於c語言中指標操作字串和指標取值的問題

20樓:

問題一里,如果你想列印字串,printf第二個引數應該是地址而不是地址裡的內容,

如果你想列印一個字元,應該是%c而不是%s應該寫為printf("%s\n",(buf+1)); 或者 printf("%c\n",*(buf+1)); (輸出是e)

問題二和一應該是同樣的錯誤

printf("%s\n",p);是列印整個字串'test'

如果你只列印一個字元,比如s

printf("%c\n",*(p+2));

21樓:匿名使用者

printf輸出字串需要傳入的引數應是你想要開始的地址,把buf+1前面的解引用(*)去掉即可

*(buf+1)傳遞的是值應該用於輸出字元的情況,如printf("%c\n",*(buf+1));

第二個同理;

推薦一本c語言語法書,c prime plus ,對於這種基本語法解釋的相當清楚

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

22樓:匿名使用者

在c語言中並沒有bai

字串這個型別

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

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

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

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

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

23樓:路圖元

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

24樓:匿名使用者

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

25樓:土杜土杜

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

26樓:棄嬰

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

27樓:五轉故劍情深

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個位置存放額外追加的空字元(字串結束的標誌)

28樓:

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

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

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

3.返回地址

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

關於C或者 C語言中字串和指標問題的疑問求高手解答

s是指向字串的指標,s是printf格式化輸出字串,而 c是printf格式化輸出單個字元。s相當於s 0 所以輸出單個字元。輸出地址用 p。輸出格式定義,定義了輸出什麼型別的變數,輸出時做怎樣的轉換。printf s s 格式 s 定義了輸出 一個字串,輸出變數 提供 輸出的 char 型 陣列 ...

C語言字串問題,C語言中,字串是什麼?

這迴圈需要執行4次,對應的字元就是0001,也就是說這個sc需要5個空間,加一個 0 for i 0 i 2.你這個程式每次執行的結果可能是不確定的,因為你沒有初始化sc陣列,printf以字串的形式輸出,他是遇到 0 字元才結束的,所以為了保證程式的結果是一致的,建議初始化陣列。sc 5 這樣就可...

c語言中關於字元陣列和字串的區別

陣列的長來度是固定的,源我們知道在哪個地方結束。對於c型別的字串,要想知道在那個地方結束的話,我們只需要檢測某個位置的字串是不是 0就行了,也就是說c型別的字串是以 0標記結束的。所以字元陣列和c型別字串的區別就是那個 0。其實從字元陣列和c型別字串的儲存位置上來說也是不同的,這也算是一個區別吧。結...