當前位置:首頁 » 編程語言 » c語言表達不能用賦值
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言表達不能用賦值

發布時間: 2022-04-24 11:45:50

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語言中賦值語句有什麼規則要求

賦值語句是由賦值表達式再加上分號構成的表達式語句。 其一般形式為: 變數=表達式。
在賦值語句的使用中需要注意以下幾點:

  1. 由於在賦值符「=」右邊的表達式也可以又是一個賦值表達式, 因此,下述形式 變數=(變數=表達式); 是成立的,從而形成嵌套的情形。 其展開之後的一般形式為:變數=變數=…=表達式;
    例如: a=b=c=d=e=5; 按照賦值運算符的右接合性,因此實際上等效於: e=5; d=e; c=d; b=c; a=b;

  2. 注意在變數說明中給變數賦初值和賦值語句的區別。 給變數賦初值是變數說明的一部分,賦初值後的變數與其後的其它同類變數之間仍必須用逗號間隔,而賦值語句則必須用分號結尾。 例如: int a=5,b,c;

  3. 在變數說明中,不允許連續給多個變數賦初值。 如下述說明是錯誤的: int a=b=c=5 必須寫為 int a=5,b=5,c=5; 而賦值語句允許連續賦值。

  4. 注意賦值表達式和賦值語句的區別。 賦值表達式是一種表達式,它可以出現在任何允許表達式出現的地方,而賦值語句則不能。

  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',''};意思就是聲明一個char類型的數組,數組中元素的個數是4個,但只能存3個元素,最後一個是空字元。每個元素分別是b,c,d和空字元。

輸出也很容易 用%s表示字元串,printf("%s",a); 請看我的示例圖

9. a:=b+1;為什麼是C語言中不合法的賦值語句

C語言中賦值語句直接使用一個等號進行賦值,如將b+1的值賦值給a的語句是a=b+1,沒有其他標點。

該形式的賦值語句常出現在偽代碼或者其他語言中。

賦值語句是由賦值表達式再加上分號構成的表達式語句。其一般形式為:

變數=表達式;

在賦值語句的使用中需要注意以下幾點。

1)由於在賦值符「=」右邊的表達式也可以又是一個賦值表達式。因此,下述形式

變數=(變數=表達式);

是成立的,從而形成嵌套的情形。

2)注意在變數說明中給變數賦初值和賦值語句的區別,給變數賦初值是變數說明的一部分,賦初值後的變數與其後的其它同類變數之間仍必須用逗號間隔,而賦值語句則必須用分號結尾。例如:

inta=5,b,c;

3)在變數說明中,不允許連續給多個變數賦初值,而賦值語句允許連續賦值。如下述說明是錯誤的:

inta=b=c=5;//須改為inta=5,b=5,c=5;

4)注意賦值表達式和賦值語句的區別,賦值表達式是一種表達式,它可以出現在任何允許表達式出現的地方,而賦值語句則不能。

10. c語言為什麼 字元串不能直接賦值 比如 int a[10]; a = "wenti";

數組名代表首地址,你定義int
a[10],系統會給你開辟空間,當a[10]的生存周期結束,系統就會通過它的地址也就是a來釋放它。a
=
"wenti"實際上是字元串常量"wenti"的首地址賦值給了a,如果可以直接賦值,那麼當a[10]的生存周期結束的時候,系統就找不到它的開辟的空間了,就無法釋放它的空間,所以不能直接賦值!