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

c語言兩個結構體賦值

發布時間: 2022-04-13 06:50:47

c語言 如何在結構體中給嵌套的結構體賦值

結構體嵌套,賦初值,大括弧嵌套就可以了。
問題是你代碼寫錯了。
你定義的old1不是結構類型,而是結構變數。
在shuju中成員要寫struct old 變數名;
不能寫struct old1。
下面是演示代碼:(補充:如果想定義一個結構類型別名,要用typedef

#include <stdio.h>

struct old

{

int year;

int month;

int day;

}old1={1972, 8, 3};

struct shuju

{

char name[10];

char gender[6];

int height;

struct old old1;

char access[9];

}shuju1={"moumouren","male",175,{2019,6,29},"well"};

int main()

{

printf("結構變數old1的初值: %d %d %d ",old1.year,old1.month,old1.day);

printf("結構變數shuju1中成員old1的初值:%d %d %d ",shuju1.old1.year,shuju1.old1.month,shuju1.old1.day);

printf("我特意起一樣的名字,就是告訴你這兩個變數是不一樣的。 ");

return 0;

}

/*(補充:如果想定義一個結構類型別名,要用

typedef struct old

{

int year;

int month;

int day;

}old1;//這樣old1才表示是一個類型,然後再定義該類型變數時,才可以寫 old1 變數名;

)*/

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

結構體變數直接賦值,就是其本身內存地址空間,按照地址分布直接賦值。
所以兩個一樣的結構變數可以直接賦值。
但是如果結構成員中有指針,且指針指向的地址大小不一樣,是不能直接賦值的。

⑶ c語言如何給結構體指針賦值

結構體數組指針作為函數參數,通過數組的首地址與偏移量對結構體數組進行scanf的賦值,在函數中通過指針間接訪問到其指向的內存。

舉例:編寫函數,輸入5個學號(int),5個姓名(字元串),5個成績數組(每組三個成績)(int[3]),依次調用函數

#include <stdio.h>

#include <stdlib.h>

struct student //建立結構體,學號,姓名,3門課的分數

{

int num;

char name[10];

int score[3];

}Stu[5]; //初始化,一共5個學生的數據

void getScore(struct student * p) //函數:向結構體讀取分數,一共三門課

{

int i, j;

for (i = 0; i < 5; i++)

for (j = 0; j < 3; j++)

scanf_s("%d", (&(p+i)->score[j]));

}

void getNum(struct student * p) //函數:向結構體讀取學號

{

int i;

for (i = 0; i < 5;i++)

scanf_s("%d", &(p + i)->num);

}

void getName(struct student * p) //函數:向結構體讀取姓名

{

int i;

for (i = 0; i < 5; i++)

scanf("%s", &(p + i)->name);

}

int main()

{

int i, j, average[3] = { 0 }; //average數組儲存每門課的平均分

getNum(Stu); //函數調用

getName(Stu);

getScore(Stu);

for (j = 0; j < 3; j++)

{

for (i = 0; i < 5; i++)

average[j] += Stu[i].score[j];

}

for (i = 0; i < 5; i++)

{

printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name); //依次列印學號 姓名

//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);

for (j = 0; j < 3; j++) //列印三門課的分數

printf(" %d", Stu[i].score[j]);

printf(" ");

}

printf("average:");

for (i = 0; i < 3; i++)

printf("%f ", (float)average[i]/5); //列印三門課平均分

printf(" ");

system("pause");

return 0;

}

如:

scanf("%c%c%c",&a,&b,&c);

輸入為:

d e f

則把'd'賦予a, ' '(空格)賦予b,'e'賦予c。因為%c 只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔,因此把' '作為下一個字元送給b。

只有當輸入為:def(字元間無空格) 時,才能把'd'賦於a,'e'賦予b,'f'賦予c。

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

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

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

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

(4)c語言兩個結構體賦值擴展閱讀:

結構體的相關操作規則:

1、可以引用一個結構體變數中的一個成員的值:

例如, student1.num表示結構體變數student1中的成員的值,student1.num的值為10001。引用結構體變數中成員的一般方式為:結構體變數名.成員名。例如可以這樣對變數的成員賦值:student1.num=10010;

2、不能將一個結構體變數作為一個整體進行輸入和輸出:

例如,已定義student1和student2為結構體變數,並且它們已有值。不能企圖這樣輸出結構體變數中的各成員的值:cin>>student1; 只能對結構體變數中的各個成員分別進行輸入和輸出。

⑸ C語言結構體數組成員怎麼賦值

intmain(void){

structstudentsbao={};

printf("%d,%s ",bao.id,bao.name);//輸出是4224528,空(應該是null)

//structstudentsbao={3,"123"};可以。第一種賦值方法

//strcpy(bao.name,"bao");//可以,

//printf("%d,%s ",bao.id,bao.name);

//bao.name="bao";錯誤「stray'351'inprogram」其他是亂碼,

//bao.name[0]='a';

//bao.name[0]='/0';

//printf("%d,%s ",bao.id,bao.name);

/*這樣可以,*/

//chararr[10]="baobao";

////bao.name=arr;//error""

//scanf("%s",bao.name);//可以,

//printf("%d,%s ",bao.id,bao.name);

//所以scanf那一類函數都可以。

//還有就是memcpy函數也是可以的

return0;

}

(5)c語言兩個結構體賦值擴展閱讀

C語言結構體數組的直接賦值及數組的長度計算:

#include<stdio.h>

//自定義一個字元串的結構體,包含字元串和字元串長度兩個變數

typedefstructStr{

charch[100];

intlength;//char數組(字元串)的長度

}myStr;

//剛開始聲明變數時每個變數的字元串長度length都為0

//這里以長度為10的數組為例,數組長度是1000

//對第0個到第9個結構體數組的長度同時賦值為0

myStrmyStr1[10]={

[0...9]={

.length=0,

}

};

intmain(){

inti;

for(i=0;i<10;i++){

printf("%d ",myStr1[i].length);

}

return0;

}

⑹ C語言 結構體的賦值

這叫結構體變數聲明與初始化。
按規定,花括弧內的 初始化 數值,必須為常量。
struct student a[3]={zhangsan,{。。。。}; //錯在初始化用了 非常量
你的結構數組a[3] 里用了變數 zhangsan, 語法上是錯的。
你可以改成:
struct student a[3]={ {0}, {1002, 後面照抄。。。。。};
其中 {0} 是給數組元素 a[0] 初始化,充0 佔位。
聲明完畢,語句部分 另加一句賦值語句: a[0]=zhangsan; 就把zhangsan的數據傳給a數組的 元素 a[0] 了。

⑺ C語言結構體數組賦值問題

代碼里幾個問題:

  1. 結構體R里,成員變數a和b數組長度都是1,不如直接定義成char a和char b;

  2. 把所有scanf和printf里的%s都換成%c;

  3. 前面兩個for循環,循環體里,每次讀取完字元,加一條語句getchar(),把輸入緩沖區的內容清空。

修改代碼如下:

#include"stdio.h"
#defineN3
structR{
chara;
charb;
}A[N],B[N];
voidmain(){
inti;
for(i=0;i<N;i++){
printf("A%d ",i+1);
scanf("%c%c",&(A[i].a),&(A[i].b));
getchar();
}
for(i=0;i<N;i++){
printf("B%d ",i+1);
scanf("%c%c",&(B[i].a),&(B[i].b));
getchar();
}
for(i=0;i<N;i++){
printf("%c,%c ",(A[i].a),(A[i].b));
}
for(i=0;i<N;i++){
printf("%c,%c ",(B[i].a),(B[i].b));
}
}

⑻ C語言中 關於結構體對象賦值的問題

結構體
直接直接賦值,是一種淺Copy,也即是說,原有變數的內容直接按照二進制形式就過來了,兩個結構體變數的內容是一模一樣的;
萬一結構體中存在
指針變數
,那麼這個指針就有了兩份Copy,應用起來就很危險了;
所以一般在只有普通變數的時候才使用淺Copy,如果存在指針,那麼這種就不再可行,需要定製才可以保證安全。

⑼ c語言,兩個結構體指針不能整體賦值嗎,如圖,前兩行,a和b都是結構體指針數組,結構體中只有整形和字

是的,在c/c++中的結構體都是不能整體賦值的(除了在聲明時可以初始化),你只能一個一個對應的賦值