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型別字串的儲存位置上來說也是不同的,這也算是一個區別吧。結...