C語言結構體可以用等號賦值嗎,c語言結構體能否整體賦值

2022-08-11 22:20:37 字數 3952 閱讀 2044

1樓:楊塵一

在c語言中,結構體與結構體之間 是不能用等號賦值的,只能是對結構體內部成員用等號賦值。

在c語言中,結構體(struct)指的是一種資料結構,是c語言中聚合資料型別(aggregate data type)的一類。結構體可以被宣告為變數、指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的型別,成員一般用名字訪問。

2樓:

樓上說得對

內層迴圈的迴圈條件應該是jlength吧

但是最大的錯是錯在結構體不能直接用=來賦值用=賦值是把地址賦值了

比如:elemtype a,b;

b=a;是把a的地址給了b;此時b就相當於a的引用,也就是a,b其實是一個結構體了

#include "stdio.h"

struct test

test01,test02;

main()

具體的你執行這個你就知道了。

我表達能力不行,不好意思

c++的話你硬是要用等號賦值的話,你可以運算子過載!

c的話你可以把elemtype中的每個變數的值都交換下就可以了啊,一樣的效果,只是看起來複雜了點而已

3樓:匿名使用者

可以。但是隻能是單個的結構體,不是結構陣列。

4樓:北風微風

內層迴圈的迴圈條件應該是jlength吧。

5樓:匿名使用者

length 是等於20吧??

c語言結構體能否整體賦值

6樓:八哥說科技

可以的,但需要保證是具有相同結構的結構體變數。

可以將一個結構體變數的值賦給另一個具有相同結構的結構體變數。如student1和student2都是student型別的變數,可以這樣賦值:student1= student2;

假設申明瞭兩個成員列表完全一樣的兩個結構體,編譯器會當作兩個完全不同的型別,即使他們的成員列表是一樣的,令兩個結構體的變數間賦值,則是非法的。

7樓:初出茅廬

可以是可以,但它有一個條件,這裡的賦初值不是想別的資料型別(如 int a;a=5;)它必須是對結構體中的每個成員以此賦值的,你可以從樓上所寫的例子看出這一點。

將一個結構體變數的值直接賦給另外一個結構體變數的時候,這兩個結構體必須是相同結構體名。

8樓:六春荷鞏暄

相同型別的結構體是可以直接賦值的,這是ansi/isoc規定的。ansi/iso

c規定的合法行為,編譯器是必須支援的。

但不能進行比較,例如

if(stu[1]

==stu[2])是不允許的。

這種問題不能靠試驗獲得準確的答案,因為你用的編譯器支援並不表明其他編譯器也支援。

9樓:

可以的:

#include "stdio.h"

struct date

d1=;

void main()

10樓:星北城南

結構體可以整體賦值為0,如果要給陣列賦值就比較麻煩,用指標會好一點

在c語言中.結構體變數之間可以相互賦值嗎

11樓:斂雋潭驪文

1、結構體變數是可以直接賦值的。定義結構體型別,然後用這個型別定義出來的變數就是結構體變數。

2、c語言在相同型別的變數間賦值時是直接記憶體複製的,即將他們的記憶體進行復制,這裡因為同樣結構體變數,屬於同一種變數,所以賦值時是按照他們的記憶體分佈來直接拷貝的。

12樓:自我程式設計

結構體變數直接賦值,就是其本身記憶體地址空間,按照地址分佈直接賦值。

所以兩個一樣的結構變數可以直接賦值。

但是如果結構成員中有指標,且指標指向的地址大小不一樣,是不能直接賦值的。

13樓:丿艾瑞灬莉婭

可以,直接用 '=' 即可

c語言為什麼結構體宣告的時候可以直接賦值,後面的就不行

14樓:風若遠去何人留

宣告的時候和後續賦值略有不同,在c語言中是兩種處理方法。

如有結構體

struct test

;定義的時候,可以

struct test var = ;

這樣初始化,結果為var.a = 1, var.c = 'c', var.b = 2;

但是如果後續賦值

var = ;

就會報錯。因為在c語言中不支援這種形式的操作。

不過可以取巧轉換一下,改成

var = (struct test);

這樣就可以了。 在這種情況下,系統會申請一個臨時變數,並初始化為該值,再對var進行賦值。而同型別結構體之間賦值操作是c語言規則允許的。

15樓:匿名使用者

這個涉及到一個臨時變數的問題,因為後面的a=; 不在結構體定義裡面了,出了這個結構體系統就無法識別了,所以會提示錯誤。

16樓:匿名使用者

你那個第一種做法叫初始化,c語言允許結構體初始化,但不允許第二種那樣賦值

如果你寫

struct student

;struct student a=;

也是對的,這就叫初始化

至於怎麼樣才能做到直接賦值,c語言裡面並沒有這樣的操作過載操作符也是c++裡面的了

不過你可以這樣struct student b=;a=b;

c語言裡面2個結構體之間是可以複製的

或者你也可以定義一個函式來做,函式體裡面要用挨個賦值的方式希望對你有幫助

17樓:匿名使用者

語法規定,這個好像沒原因可說

要賦值的話,你可以這樣 a.a=1;相信你也知道

c語言中結構體,可以在定義結構體型別的時候,給某些成員賦值不

18樓:兜裡有兩塊糖

在c語言的語法中,這樣不行

如果你需要初始化

可以這樣寫

struct stu student = ;

在c語言中。結構體變數之間可以相互賦值嗎?

19樓:匿名使用者

1、結構體變數是可以直接賦值的。定義結構體型別,然後用這個型別定義出來的變數就是結構體變數。

2、c語言在相同型別的變數間賦值時是直接記憶體複製的,即將他們的記憶體進行復制,這裡因為同樣結構體變數,屬於同一種變數,所以賦值時是按照他們的記憶體分佈來直接拷貝的。

20樓:匿名使用者

可以的,同型別的結構體變數可以。比如:

struct test a,b;

a=b;//這樣可以的。

如果是不同的型別,但是結構體沒資料型別一樣就要用memcpy拷貝記憶體(標頭檔案string.h)。例如:

struct test1 a;

c語言 結構體的賦值可以直接用『=』嗎?

21樓:匿名使用者

同型別的可以。

不同型別的話,也可以用,一般在做通訊方面用的比較多。因為處理協議。

發包方按照某個協議結構體填充後,傳送;接收方收到時其實是一個很長的字串。那接收方一般用這種方法:結構體 = (結構體)&字串, 當然接收方的結構體跟傳送方的結構體不一定一樣,都是根據協議來的。

你自己寫**測試一下行了,這麼做你要對記憶體比較瞭解,不然很容易搞錯的...

22樓:匿名使用者

c不行,

c++用過載=操作符可以實現,很簡單。

23樓:匿名使用者

不可以,用「==」。

C語言結構體,C語言結構體定義

sort函式引數裡寫的是陣列,因此呼叫函式的時候傳的是變數的地址,當結構體變數的值在sort函式發生變化的時候,在主函式的值也會發生同樣的變化,因此這個函式其實不需要返回一個具體的數值,寫return就可以了。其實如果不需要返回值的話,可以直接定義為void型別,這樣就不需要return語句了。so...

C語言結構體定義,C語言結構體定義

所謂結構體陣列,是指陣列中的每個元素都是一個結構體。在實際應用中,c語言結構體陣列常被用來表示一個擁有相同資料結構的群體,比如一個班的學生 一個車間的職工等。結構體可以儲存不同的資料型別,將他們互相聯絡起來。結構體陣列可以連續儲存多個結構體,和陣列作用相似。比如想定義同一個最小外接矩形的四個座標值,...

C語言結構體題目,c語言結構體題目

p為結構 st的指標 陣列a 3 為結構 st的陣列 既有3個st,每個結構 st裡有2個元素,所以有6個數值 第三問 a為陣列a 3 第一個元素a 0 的地址 p a,將陣列a的地址賦值給p,p指向a 0 p x 即為a 0 x 樓主學結構應該知道 dt 0 指取dt 0 的地址 第二問 a 0 ...