⑴ 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語言結構體數組賦值問題
代碼里幾個問題:
結構體R里,成員變數a和b數組長度都是1,不如直接定義成char a和char b;
把所有scanf和printf里的%s都換成%c;
前面兩個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++中的結構體都是不能整體賦值的(除了在聲明時可以初始化),你只能一個一個對應的賦值