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 ...