『壹』 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語言中結構體的值

```
首先..糾正樓上兩位的錯誤```

attribute_t *p = new attribute_t;

pattribute = (attribute_t *) (pktdata+42+prclen);
是有本質區別的```

第一種分配了一個attribute_t結構體的內存空間```
第二種的話只是簡單的指針賦值而已```而且賦給的值還是一塊未分配的內存``

如果是第一種的話, 它的值是不確定的, 因為你沒有初始化.
如果是第二種的話, 會出現運行時錯誤, 因為pktdata+42+prclen, 你強制轉換
的這個地址可能並沒有被分配```除非你有特殊處理, 先在pktdata+42+prclen這塊地址分配了一個attribute_t...

『叄』 c語言結構體里的一個元素如何賦值

typedef struct _BOOK_INFO
{
int nType;
}BookInfo;

賦值如下:

BookInfo bookinfo;
bookinfo.nType = 1;

如果滿意的話,請給點分吧, 我嚴重缺分啊。 呵呵

『肆』 C語言結構體賦值問題

之所以出現你說的問題,是因為當執行
for(i=0;i<3;i++)
scanf("%c
%d
%f",&stu[i].name,&stu[i].a,&stu[i].b);
這步的時候,由於回車也算是一個字元,循環的時候把回車也賦給name了/所以輸出的時候就會錯誤了.想解決這個問題只要把回車那個字元給吃掉就可以了.把這個循環改成:
for(i=0;i<3;i++)
{
scanf("%c
%d
%f",&stu[i].name,&stu[i].a,&stu[i].b);
getchar();
}
就沒問題了.

『伍』 c語言結構體賦值

struct subject
{
int score;
}*sub;
sub是一個結構體指針,因此初始化就把NULL賦值給sub就可以了。
而要想有score這個變數,sub必須指向一個可用內存,用malloc申請。

『陸』 C語言結構體賦值

首先這樣編譯會出錯。
struct
{
char ch;
int pri;
}
定義結構體類型,後面沒有跟分號,說明後面是該類型的變數列表,之後遇到Pri接下來的空格後面跟的lpri編譯器就不知道要干什麼了。
如果用struct
{
char ch;
int pri;
};,還是出錯,因為之後的Pri沒有聲明或定義。
如果用struct Pri
{
char ch;
int pri;
};,純C的話不行,Pri是結構體名而不是類型名,會編譯出錯。C++下會把Pri當作struct Pri,不會出錯。
可以這么寫:
typedef struct
{
char ch;
int pri;
}Pri;
Pri lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}};
Pri rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
最後兩行也可以這樣寫:
Pri lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
注意倒數第二行是分號還是逗號會影響初始化列表的語義。
(順便,這個不是賦值。)
話說回來,一開始的寫法去掉Pri是正確的(只是定義之後無法訪問該類型,一般不推薦):
struct
{
char ch;
int pri;
}
lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
====
[原創回答團]

『柒』 C語言中怎麼給一個結構體用scanf進行賦值

結構體數組指針作為函數參數,通過數組的首地址與偏移量對結構體數組進行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。

(7)c語言結構體的值擴展閱讀:

1、函數原型

int scanf(const char * restrict format,...);

函數 scanf() 是從標准輸入流stdin [1] (標准輸入設備,一般指向鍵盤)中讀內容的通用子程序,可以說明的格式讀入多個字元,並保存在對應地址的變數中。

函數的第一個參數是格式字元串,它指定了輸入的格式,並按照格式說明符解析輸入對應位置的信息並存儲於可變參數列表中對應的指針所指位置。每一個指針要求非空,並且與字元串中的格式符一一順次對應。

2、返回值

scanf函數返回成功讀入的數據項數,讀入數據時遇到了「文件結束」則返回EOF。如:

scanf("%d %d",&a,&b);函數返回值為int型。如果a和b都被成功讀入,那麼scanf的返回值就是2;

如果只有a被成功讀入,返回值為1;如果a和b都未被成功讀入,返回值為0;如果遇到錯誤或遇到end of file,返回值為EOF。end of file為Ctrl+z 或者Ctrl+d。

例:使用scanf函數輸入數據。

#include <stdio.h>

int main(void)

{

int a,b,c;

printf("Give me the value of a,b,c seperated with whitespaces: ");

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

printf("a=%d,b=%d,c=%d ",a,b,c);

return 0;

}

注意:&a,&b,&c中的&是定址操作符,&a表示對象a在內存中的地址,是一個右值。變數a,b,c的地址是在編譯階段分配的(存儲順序由編譯器決定)。

如果scanf中%d是連著寫的如「%d%d%d」,在輸入數據時,數據之間不可以用逗號分隔,只能用空白字元(空格或tab鍵或者回車鍵)分隔——「2 (空格)3(tab) 4」 或 「2(tab)3(回車)4」等。若是「%d,%d,%d」,則在輸入數據時需要加「,」,如「2,3,4」。

網路——scanf(計算機語言函數)

『捌』 C語言結構體數組元素賦值

scanf("%d%s%c",stu[i].number,stu[i].name,stu[i].sex);把這句分成三句輸入試一下
scanf("%d",stu[i].number);
scanf("%s",stu[i].name);
scanf("%c",stu[i].sex);

『玖』 c語言結構體數組賦值

不用理哪些只知道c++的人的話,不用管c++的什麼重載函數,
在標准c語言中,對於大位元組類型編譯器默認可以直接賦值。
你這樣賦值是沒有問題的。

『拾』 C語言如何給結構體內的成員賦值

#include<stdio.h>
structA{
inta;
}g,*G=&g;//指針在使用之前要有具體的地址,g是變數,指針指向他就可以了

intmain(){
G->a=2;
printf("%d ",G->a);
return0;
}