為什麼字串指標的陣列輸出時不用加

2023-02-20 16:45:30 字數 4841 閱讀 8714

1樓:無法無天

標頭檔案:#include

puts()函式用於將一字串放到標準輸出流(stdout)中,並在最後增加換行符 '\n',其函式原型如下:

int puts(char *string);

【引數】string為要輸出的字串。

【返回值】輸出成功返回非0值,否則返回0。

puts()從string的開頭往stdout中輸出字元,直到遇見結束標誌 '\0','\0'不會被輸出到stdout。

因為puts的形參就是指標型別

2樓:____mint藍

因為字元陣列中每一個元素都相當於一個指標變數,就不需要在加※了

為什麼字元指標指向字串的時候,輸出時不需要再指標前加*號呢?

3樓:大野瘦子

因為char *str這個定義了一個型別為char *的字元型指標str ,而str指向了 i love china!中的第一個字元i。

cout流裡面有一個迴圈就是輸出str指向的字串,其中把str賦給了temp指標,作為移位用,從而一個個輸出出來。

而*str是一個字元了就是i ,*是解引用 就是讀出str指向的字元 ,所以*str就是i了 這個是不能賦值和移位的 所以輸出不出來。

4樓:海天盛

因為char*str定義了一個char*字元指標str,而str指向了ilovechina中的第一個字元i。

在cout流中有一個複製迴圈,它是一個具有數百個輸出str點的字串,在這個字串中,str被賦值給臨時指標,以便一個接一個地輸出。

然後*str是一個字元,也就是i*是一個derecration,也就是str指向的那個字元,所以*str就是i這個不能被賦值或移位所以它不能被列印出來。

擴充套件資料:

關於字串指標

1.字元陣列中儲存一個度字串

char字串[]="linuxc";

printf("%s\n",字串);

字串是一個字元陣列的名稱,它也是應答字元陣列的第一個地址。

2.使用字串指標指向一個字串

如果你不想定義一個字元陣列,你可以用一個指標指向一個字串,稱為「字串指標」,例如:

char*p="linuxc";

printf(「%s\n」,p);

5樓:

指標概念沒弄懂 *是個指標符號 表示str是個指向字串的指標變數改為cout<<*str<這時的*表示解引用,表示對所指向地址進行解引用即取值。

輸入out<

指標字串輸出時候前面沒有* 為什麼

6樓:匿名使用者

char *s="abcd";

printf("%s",s); // 對於"%s",函式要求字串變數指標,所以用s。

char *p;

int a = 5;

p = &a;

printf("%d",*p); // 對於"%d",函式要求一個int型變數,*p是解除指標,取得int型值。

7樓:匿名使用者

printf("%s",s);用s的原因是,%s要求輸入一個指標,或陣列名(也類似於指標);

如果換成要列印一個字元:printf("%c",*s);這裡就需要輸入指標指向的字元而不是指標了;

指標的表示用s,指標指向的字元用*s或s[0]。

同理,printf("%d",*p);這是要輸出p指向的整型資料;printf("%d",p);則是要輸出指標本身的值(也就是a的地址)了。

8樓:匿名使用者

字串和字元或者變數是有所不同的

%s是輸出一個字串,以字串結束符當輸出的結束判斷s是指向一個5byte空間,其中有4個字元和一個結束符列印%s是需要一個地址的,所以s不需要加*%d列印是需要一個變數,而不是一個地址,所以下面的需要加*來表示一個變數,而不是地址

p是地址,不是你所需要的

你下面的那個*可以不加,但是列印的是p中所儲存的內容,而不是p指向的地址中的內容

也就是說不加*列印出來的是p的內容,是一個地址,也就是a的地址加*,列印的是p指向的記憶體空間的內容,也就是a地址中的資料,p中儲存的內容是a的地址

這麼說明白了?

一個變數有兩個資料,你知道吧

一個是變數的內容,也就是變數地址中儲存的資料一個是變數的地址,這個是分配的記憶體空間的流水地址需要地址還是需要內容,這個看需要

為什麼c語言用指標輸出字串不用加*號

9樓:聽不清啊

printf在輸出字串時,需要的是指向字串的門地址。而str就是它所需要的這樣一個首地址。

10樓:嵩山少俠來了

為什麼c語言用指標輸出字串不用加*號?因為char*str定義了一個char*字元指標str,而str指向了ilovechina中的第一個字元i。

在cout流中有一個複製迴圈,它是一個具有數百個輸出str點的字串,在這個字串中,str被賦值給臨時指標,以便一個接一個地輸出。

然後*str是一個字元,也就是i*是一個derecration,也就是str指向的那個字元,所以*str就是i這個不能被賦值或移位所以它不能被列印出來。

擴充套件資料:

關於字串指標

1.字元陣列中儲存一個度字串

char字串[]="linuxc";

printf("%s\n",字串);

字串是一個字元陣列的名稱,它也是應答字元陣列的第一個地址。

2.使用字串指標指向一個字串

如果你不想定義一個字元陣列,你可以用一個指標指向一個字串,稱為「字串指標」,例如:

char*p="linuxc";

printf(「%s\n」,p);

「linuxc」是一個字串常量。字串常量的c語言:在記憶體中開啟一個字元陣列來儲存字串常量,並將開啟的字元陣列的第一個地址儲存到p。

為什麼字串陣列前不需要加&符號

11樓:匿名使用者

陣列名代表陣列的首地址,是一個指標,所以不用加&符號。如果是引用陣列的元素,就必須得加&符。還有字串是隨機址分配。

12樓:匿名使用者

&是表示取地址,但是char * s(或char s[10]) 其中s是指標 是所儲存的陣列的首位的地址,它本身就是一個地址,所以可以用scanf("%s",s)來輸入,其中%s是針對字元陣列特有的,

如下** int a[100] scanf("%d",a);也是可以執行的,但是輸入的資料在a[0]中,因為是%d

c語言程式設計輸入時為什麼一維陣列要加地址符,字元陣列就不用呢

13樓:娛樂小八卦啊

因為字元陣列,陣列名本身就是指一個地址。

還有一種意思就是指代name整個陣列。&name 就是整個陣列的首地址。所以name和&name取得的地址是相同的。

擴充套件資料name和&name區別:

#include

int main(void)

char name[10]=;

return 0;

所以說scanf("%s",name);和scanf("%s",&name);執行後的結果是一樣的,都是name的首地址,都是給字元陣列name賦值。推薦用 scanf("%s",name); ,第二種不容易理解也容易犯錯,有些編譯軟體也不支援會報錯。

14樓:吉祥二進位制

在c語言中,陣列的名字本身就是一個指標即為起始地址,字元陣列也是一樣的。比如

int a[2] = ;

int *p = a; //a本身就是一個指標,它表示陣列的起始地址。

char str[20] = "hello";

char *pstr = str; //str本身就是一個指標,它表示陣列的起始地址

陣列的名字,等同於第一個元素的地址。以上面陣列a和str為例,a本身是個地址,它等同於&a[0]獲取的地址。str等同於&str[0]。

15樓:匿名使用者

陣列其實就是個地址,它儲存的是陣列第一個元素的地址char str[100];

str 其實就是 &str[0]

因此 scanf("%s", str); 也可以寫成 scanf("%s", &str[0]);

16樓:匿名使用者

都要加的 例如

char a[3];

int b[3];

int i=0;

for(i=0;i<3;i++)

輸入的後一個引數為地址

17樓:匿名使用者

#include

main()

這個是一維陣列輸入要用的。二維函式有時候也要,有時候卻不用,我也不清楚。

你可以參考這個

網頁連結

關於c語言字元陣列輸出問題,在printf輸出時,二維陣列時,%c格式時不用&,為什麼%s時要加&。詳細如下:

18樓:

錯得遠了點!

既沒有s這個陣列,也沒看到宣告它是指標,s[0]、&s[0]等從**來?

char str[3][5]=,,}這樣定義的str只是個單位元組整型二維陣列,不得用%s這樣的格式化控制符來控制按字串輸出!

&str[2][2]是11那個數的地址,正宗的應該用%p控制輸出,用%x、%d也行,但就是不能用%s控制輸出,因為%s是用來輸出字串的!

字元指標,字串和字元陣列的區別

定義 char ch 10 char ch2 char str 以及 string 1.全域性的變數和函式內的static變數,存放在記憶體堆區域。2.全域性的陣列和函式內定義的static的陣列,存放在記憶體堆區域。3.區域性變數,陣列,存放在記憶體的棧區域。4.定義char ch 10 時,如果...

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 每行結尾的 僅僅是為了連線字串使用的,如果一個字串過長,寫在一行比較不合適,就在該行結尾處加上一個反斜槓 就可以在下邊的行繼續寫這個字串...

C語言字串出現亂碼,C語言 字串輸出時最後出現亂碼

第6行改為 char a 100 b 100 如果要輸出最終結果,沒必要每複製一個字元就輸出一次。將第25行刪掉。可以參考一下這個,講的很清楚 亂碼問題 codeblocks亂碼問題。它這個是codeblocks的,其他其實也差不 太多吧。關鍵是 原始檔儲存編碼 編譯器解釋原始檔的編碼 生成執行檔案...