char對應scanf時加位址符能否正常run

2022-03-08 16:15:25 字數 5148 閱讀 3175

1樓:牛奶不喝奶

眾所周知,int ,float,char等關鍵字是用於宣告變數,表示在電腦記憶體空間中開闢乙個儲存空間儲存將要儲存的數值,而位址就是指這個變數空間所在電腦的位址位置,

scanf是通過這個位址找到變數空間,將常量儲存進入指定的儲存空間,& 取址符,表示獲取變數儲存在電腦儲存中的位址位置,

能正常run,但正常run只是代表沒有發現系統所知的正常語法錯,畢竟系統不能十全十美去判斷你的語法錯誤,不代表你程式是對的

對於單個字元型變數需要使用&取址,對於字元型陣列,c語言中規定,字元型陣列名為陣列首位址,所以不需要再次使用&,例如 char s[10];那 s 相當於是 s[0]的位址

2樓:匿名使用者

正確的做法就是這樣的,當然沒問題,如:

char a;

scanf("%c",&a);

這樣則不需要加&了:

char s[8];

scanf("%s",s);

3樓:匿名使用者

c的輸入函式是scanf而非scanf。

c沒有字串變數,字串是用字元陣列處理的。陣列的特點是陣列名有雙重身份:既是陣列名又是這個字串第乙個字元的位址,也就是這個字串的首位址。

所以當有char a[10]的宣告後,scanf("%s",a)和scanf("%s",&a)都是合法的,前者a是指標身份,後者a是陣列名身份;無論早期的c還是現在的c都是認可的。

4樓:

char 必須要,

char   分兩種情況:

作為乙個字串來說,不能要,

單個元素的使用,必須要

5樓:匿名使用者

比較困難,建議:

用char s[20],c; scanf("%s",s); c=s[0]; 替代char c; scanf("%c",&c);

6樓:趣術趣人

可以,會輸出對應的位址

為什麼在char型別時用scanf語句,會執行不了?????

7樓:匿名使用者

scanf("%c%c",&a,&b); //一、你的**中少了&符號!導致程式異常!先修改了再試

//二、你這裡格式中輸入字元時,沒有空格要求,而你輸入時帶了空格,所以,輸出會不正確

如下輸入:

ab不要帶空格,空格也是乙個合法的字元!

8樓:匿名使用者

因為你沒有打位址符,在scanf中的a,b前加上&

9樓:匿名使用者

int main 改為void main

為什麼c語言scanf函式對字串不要加 取位址運算子&

10樓:匿名使用者

c語言的字串為陣列形式,而陣列的名稱可以表示其位址,故對字串輸入不需要加位址符。而單獨的字元、整型變數等的名稱不能直接表示位址,故需要加位址符。

資料型別

字串資料型別是建模在形式字串的想法上的資料型別。字串是幾乎在所有程式語言中可以實現的非常重要和有用的資料型別。

在某些語言中它們可作為基本型別獲得,在另一些語言中做為復合型別獲得。多數高階語言的語法允許通常用某種方式引用起來的字串來表示字串資料型別的例項;這種元字串叫做「文字」或「字串文字」。

擴充套件資料

字串c語言的字串其實就是以'\0'字元結尾的char型陣列,使用字元型並不需要引用庫,但是使用字串就需要c標準庫裡面的一些用於對字串進行操作的函式。它們不同於字元陣列。使用這些函式需要引用標頭檔案。

檔案輸入/輸出

在c語言中,輸入和輸出是經由標準庫中的一組函式來實現的。在ansi c中,這些函式被定義在標頭檔案;中。

標準輸入/輸出

有三個標準輸入/輸出是標準i/o庫預先定義的:

1、stdin標準輸入

2、stdout標準輸出

3、stderr輸入輸出錯誤

11樓:

c的輸入函式是scanf而非scanf。

c沒有字串變數,字串是用字元陣列處理的。陣列的特點是陣列名有雙重身份:既是陣列名又是這個字串第乙個字元的位址,也就是這個字串的首位址。

所以當有char a[10]的宣告後,scanf("%s",a)和scanf("%s",&a)都是合法的,前者a是指標身份,後者a是陣列名身份;無論早期的c還是現在的c都是認可的。

12樓:匿名使用者

因為scanf要獲取變數的位址才能把讀到的內容存放在這個變數裡

你說的字串是c風格字串,c風格字串變數本身就是這個字串的首位址,所以無需加&

13樓:匿名使用者

因為字串 名本身就是乙個指標。 如: char a[100]; a就是指標,指向陣列首位址。

而 int a; a 是整形變數,要用scanf來讀取資料放入 記憶體, 要訪問記憶體區域,要通過位址來訪問

所以要加上&, 通過&a來訪問記憶體區域。

14樓:匿名使用者

字串的變數名稱就是這個字串的首位址了

既然已經是位址了,就不用再取位址了

15樓:非常老

編譯器認為字串代表位址。

16樓:落單毛毛蟲

c語言的字串實際上是 字元陣列.

既然是陣列, 那麼陣列頭自然是乙個指標.

char str = ;

這個str實際上是乙個不可變的字元指標.

scanf的引數要求傳入指標. 之後按照格式化字串對指標指向的位址賦值..

str本身就是乙個指標了, 所以不需要&str,如果&str, 那麼得到是就是指標的指標,scanf並不只是對字串不加 取位址運算子.

例如 int arr = ;

scanf("%d", arr);

這裡對arr照樣不需要取位址運算子, 因為arr是陣列頭, 本身就是乙個指標.

上面的語句是對arr陣列的第乙個元素賦值, 就是arr[0];

當然也可以這麼寫.

scanf("%d", &arr[0]);

arr[0]是乙個值, 並非指標, 於是對其取位址.

對於字串也可以這麼寫.

char str[3] ;

scanf("%c", &str[0]);

這是對str的第乙個元素賦值也就是 str[0];

不知道你看懂了沒有?

17樓:匿名使用者

因為字串 char *str:本身就是指標變數

c語言中為什麼printf輸出變數值的時候不要加位址符&,而scanf中卻要加上

18樓:聽不清啊

這是因為使用c語言定義的標準函式,c語言開發時就這麼規定的,沒有太多的為什麼(當初開發c語言的時候也可以不這麼寫)。

printf輸出變數值的時候不要加位址符&,而scanf中卻要加上。我們使用的時候記住它,就行了。

有時也有特例:陣列名本身就代表位址,就可以不用加取位址符&了(可以不加,加了也不錯)。

char s[100];

scanf("%s",&s);

19樓:未來需努力點綴

樓主你好

printf函式的目的是輸出 一般就是使用該變數的值 不需要改變這個變數的值

然而scanf函式的目的是輸入 是肯定會改變變數的值如果樓主學了指標 就應該知道:c語言在乙個函式中要改變變數的值 就需要使用指標 那麼對於乙個變數來說 就需要取位址(指標也就是位址)

希望樓主明白了哈

20樓:匿名使用者

輸出是變數的值,而賦值卻是需要位址的。

21樓:巛尢尢巛

根據我的經驗。我可以很負責的告訴你:話說輸出的printf ,肯定是已經定義賦了初始值,或者根據已知量還有前面的公式得出乙個具體的數或者字元,輸出時只需寫出名稱就可對應上相應資料,這相當於清點物品,只需說名稱即可。

而從鍵盤輸入的scanf 函式,是把該資料記錄下來,相當於把資料放在記憶體的某個位置,只是相當於搬來東西,指定存放的位置。手機打字辛苦,請樓主採納

c語言中 用scanf函式輸入字串陣列,取位址符&是不用輸的,如果輸了取位址符算錯麼 ,或者含義不一樣麼?

22樓:匿名使用者

一般變數使用取位址符,是獲取其位址,即為指向該變數的指標。

陣列名就是陣列的首位址,指向該陣列的第乙個元素的指標,只不過是常量指標而已。所以不用再加取位址符。

要加的話可以如下:

char str[10];

scanf("%s", &str[0]); // 取第一元素的位址,等價於陣列名  str

23樓:雪山魔雲

我做微控制器程式的,實際測試過

char name[20];

scanf("%s",name);

scanf("%s",&name);

name=&name 這兩個位址的整型值相同

24樓:張大爺

scanf("%s",name)這種形式是對的name已經代表陣列name[20]的首位址了再加&就成了首位址的位址了;陣列中元素的位址這樣表示&name[n];沒有你說的這種形式]

25樓:匿名使用者

name就是陣列位址位址,scanf("%s",name);這個是對的

26樓:兩葉障目

上機執行一下不就的了

scanf為什麼有時用取位址符,有時不用

27樓:匿名使用者

因為a是個整型變數名,所以scanf要取得這個變數在記憶體中的位址;而name是char陣列,name本身指向這個陣列首位址。也就是說a裡面儲存的是內容,name裡儲存的本身就是個位址。

28樓:匿名使用者

簡單點:&表示取位址,而陣列不要後面的就表示首位址,故不用.

29樓:

因為定義為char 就可以把它當作位址

將下列高新技術產業區與其對應地連線班加羅爾

b a d c 班加羅爾是印度的高新技術產業區,矽谷是美國的高新技術產業區,該地區也是世界上最大的高新技術產業區,北京的中關村是我國最早建立的高新技術產業區,新竹是台灣的高新技術產業區。被稱為世界高新技術產業中心的 矽谷 位於 a 印度班加羅爾b 德國慕尼黑c 中國北京d 美國舊金 美國的聖弗朗西斯...

小馬虎在計算3 56加一位小數時,由於錯誤地把數的末尾對齊,結果得到了4 23,正確的結果應當

4.23 3.56 0.67 6.7 3.56 10.26 小馬虎在計算3.56加乙個一位小數時,由於錯誤地把數的末尾對齊,結果得到4.23。正確結果應該是多 四點23 3點56 0點六七,所以是6.76點7 3點五六,等於10.26 4.23 3.56 xx 3.56 xx xx 10.26 10...

小馬虎在計算3 54加一位小數時由於錯誤地把數的末尾對齊結果得4 27你能幫他算出正確答案嗎

正確答案是copy10.84。分析 首先用4.27減去3.54,可得差是0.73,判斷出一位小數應該是7.3 然後用3.54加上7.3,求出正確結果應該是多少即可。解 因為,4.27 3.54 0.73,所以,一位小數應該是7.3 又因為,3.54 7.3 10.84,所以,正確結果應該是10.84...