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

c語言結構體怎麼賦值

發布時間: 2022-01-31 22:10:23

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;

}

(1)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語言結構體賦值的問題

可能是你的編譯器要求所有的變數聲明都應該放在函數體開頭

⑶ C語言如何給結構體內的成員賦值

內存溢出,你的指針要指向一個你的結構體實體(實例)。一般定義一個指針的意思放的地址,而剛定義的指針放的地址是什麼,這個一般不知道,可以就指向本不屬於自己的地址,結果操作系統就把它給終止或者阻之於外了。

⑷ C語言,結構體中的數組怎麼賦值,

(1)用字元常量逐個初始化數組。例如:

char a[8]={'i','l','o','v','e','y','o','u'};

把8個字元依次分別賦給c[0]~c[7]這8個元素。

如果在定義字元數組時不進行初始化,則數組中各元素的值是不可預料的。如果花括弧中提供的初值個數(即字元個數)大於數組長度,則出現語法錯誤。

如果初值個數小於數組長度,則只將這些字元賦給數組中前面那些元素,其餘的元素自動定為空字元(即'')。

如果提供的初值個數與預定的數組長度相同,在定義時可以省略數組長度,系統會自動根據初值個數確定數組長度。

例如:char c[]={『c』,『』,『p』,『r』,『o','g','r','a','m'};

這時c數組的長度自動定為9。也可以定義和初始化一個二維字元數組,例如:

char diamond[5][5]={{'','','#'},{'','#','','#'},{'#','','','','#'},

{'','#','','#'},{'','','#'}};用它代表一個菱形的平面圖形。

(2)字元串常量初始化數組。例如:

char c[]={『c』,『』,『p』,『r』,『o','g','r','a','m'};

可寫為:char c[]={"C program"};

或去掉{}寫為:char c[]="C program";

注意:此時數組c的長度不是9,而是10。因為字元串常量的最後由系統加上一個''。上面的初始化與下面的初始化等價。

char c[]={『c』,『』,『p』,『r』,『o','g','r','a','m',''};

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

其定義的一般形式是:char數組名[數據長度]

例如:

char c[10];

c[0]='I';c[1]='';c[2]='l';c[3]='o';c[4]='v';c[5]='e';c[6]='';c[7]='y';c[8]='o';c[9]='u';

以上定義了c為字元數組,包含10個元素。

由於字元型數據是以整數形式(ASCII代碼)存放的,因此也可以用整型數組來存放字元數據,例如:

int c[10];

但這時每個數組元素佔2個位元組的內存單元,浪費存儲空間。

字元數組也可以是二維或多維數組,例如:

char c[5][10];

即為二維字元數組。

初始化

字元數組的初始化與數值型數組初始化沒有本質區別。但它除了可以逐個給數組元素賦予字元外,也可以直接用字元串對其初始化。

輸入輸出

字元數組的輸入

(1)用getchar()或scanf()的'%c'格式符對數組進行字元賦值。例如,對於數組a[10]:用getchar()賦值:

for(i=0;i&lt;10;i++)

a&lt;i&gt;=getchar();

用scanf()賦值:

for(i=0;i&lt;10;i++)

scanf("%c",&a&lt;i&gt;);

(2)用scanf()的'%s'格式對數組賦值。還是對於數組a[10]:

scanf("%s",a);

scanf("%s「,&a[0]);

輸入」C program「並回車時,a數組會自動包含一個以」「結尾的字元串」C program「。

字元數組的輸出

(1)用putchar()或printf()的『%c』格式符對數組進行字元賦值。例如,對於數組a[10]:用putchar()賦值:

for(i=0;i&lt;10;i++)

a&lt;i&gt;=putchar();

用printf()賦值:

for(i=0;i&lt;10;i++)

printf("%c",a&lt;i&gt;);

輸出結果為:

c program

(2)用printf()的'%s'格式對數組賦值。還是對於數組a[10];

printf("%s",a);

輸出結果為:

c program

⑸ C語言結構體賦值的問題

VS不能完整支持所有C99的特性,如果你要使用,可以使用DevCPP,或者直接使用GCC編譯


另外雖然char*filename這種形式也許不會出現問題,但為了可讀性還是建議加上空格


另外給你摘抄來一段說明

⑹ 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語言結構體里的一個元素如何賦值

typedef struct _BOOK_INFO
{
int nType;
}BookInfo;

賦值如下:

BookInfo bookinfo;
bookinfo.nType = 1;

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

⑻ 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語言如何給結構體指針賦值

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

首先這樣編譯會出錯。
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}};
====
[原創回答團]