1. 在c語言中,「不能將一個常量賦值給一個表達式」這句話該怎麼理解
所謂賦值,例如int x ,y; x=6; x是有地址,在內存中是有空間的,你可以用&x來取x的地址,但是表達式,例如x+y,這個整個表達式,是沒有地址的,所以不能給它賦值。
2. C語言不允許用 賦值運算符 對數組整體進行賦值。這句話怎麼理解呀,是一個判斷題。
正確。數組是多個元素的集合,而數組名是記錄數組首地址的指針常量,賦值時C語言編譯器會認為是要修改數組名記錄地址值,這是不允許的。
3. C語言里為什麼不能用賦值語句對字元數組進行整體賦值
首先C語言裡面的數組,一旦定義好了,是無法改變類型和長度的,也不是指針,不能改變指向的內容,所以如下這種寫法
inta[10],b[10];
a=b;
是無法編譯的。
在其他語言里,比如java,c#,javascript,python等等等等,數組都是作為對象來使用的
可以寫a=b,那麼a原來表示的數組就被拋棄了,a和b表示的就變成同一個數組了。
而C語言里,數組只是一塊具有類型和長度的內存,沒有提供如此復雜的功能
從邏輯上講,可以將數組的賦值的含義變成向數組的元素賦值。但這樣就會使得以簡單為原則的C語言變得異常復雜:
如果a的長度比b的長度大,那麼只更新b的長度,剩下的保持原樣;如果b的長度比a的長度大,那麼就只更新a的長度。這個還好說,但數組的長度信息只有在它沒有轉化成指針的時候才存在,當數組作為函數參數,或者賦值給指針的時候,長度的信息就丟失了,就退化成一個指針類型了。這就牽扯到了指針的賦值,而指針的賦值是有原來的語義的。所以事情會變得很復雜。
總而言之就是C作為一種接近底層的語言,它的數組和指針以及內存的使用有數不清的關系,所以不支持這種高級的語法。
4. 在c語言中不是說不允許用賦值語句給字元數組賦值的嗎 那為什麼此處可用啊
這里不是賦值,這里是初始化的過程,在初始化的時候把這個指針的地址指向這個常量字元串的地址,因此可以在初始化的時候為他賦值。而初始化以後,再直接賦值就不行。
5. C語言中賦值語句有什麼規則要求
賦值語句是由賦值表達式再加上分號構成的表達式語句。 其一般形式為: 變數=表達式。
在賦值語句的使用中需要注意以下幾點:
由於在賦值符「=」右邊的表達式也可以又是一個賦值表達式, 因此,下述形式 變數=(變數=表達式); 是成立的,從而形成嵌套的情形。 其展開之後的一般形式為:變數=變數=…=表達式;
例如: a=b=c=d=e=5; 按照賦值運算符的右接合性,因此實際上等效於: e=5; d=e; c=d; b=c; a=b;注意在變數說明中給變數賦初值和賦值語句的區別。 給變數賦初值是變數說明的一部分,賦初值後的變數與其後的其它同類變數之間仍必須用逗號間隔,而賦值語句則必須用分號結尾。 例如: int a=5,b,c;
在變數說明中,不允許連續給多個變數賦初值。 如下述說明是錯誤的: int a=b=c=5 必須寫為 int a=5,b=5,c=5; 而賦值語句允許連續賦值。
注意賦值表達式和賦值語句的區別。 賦值表達式是一種表達式,它可以出現在任何允許表達式出現的地方,而賦值語句則不能。
下述語句是合法的: if((x=y+5)>0) z=x; 語句的功能是,若表達式x=y+5大於0則z=x。 下述語句是非法的: if((x=y+5;)>0) z=x; 因為x=y+5;是語句,不能出現在表達式中。
6. c語言:「不能在賦值語句中通過賦值運算符『=』對字元型數組進行整體賦值。」這句話為什麼是對的
char s[5]="asdf";
這句不是賦值而是初始化;
講的賦值語句是在程序執行中的賦值,就像
int a;
int b;
b=a; 這是賦值;
對於字元而言,要賦值就要採用strcpy(s1,s2)這個函數。
7. C語言的條件表達式中不能用賦值=對嗎
可以呀,賦值語句的返回值為所賦的值。如
if(x=5)
相當於
if(5)
,true
;又如
if(y=false)相當於
if(false)
並不是說恆為真,要看所賦的值
8. C語言中,字元串為什麼不能直接用等於號賦值給一個變數。 例如 int a;a=「bcd」;
等號當然可以用賦值,賦值就是把等號左邊值的賦給右邊,之所以你寫的不對是因為你的數據類型不對。a是int型,即整數型的,例如你可以讓a=3意思是把3賦給a,但不能讓一個字元串賦給a,所以你那樣賦值肯定會報錯。
c語言沒有專門用於儲存字元串的變數類型,字元串都是被儲存在char類型的數組中。可以把所有的字元串都看成是一個數組。可以這樣聲明chara[4]={'b','c','d','