c語言中結構體中有二維陣列怎樣賦初值

時間 2022-01-20 17:05:03

1樓:

最基本的方法就是:

mx[0].name[0] = x;

mx[0].information[0][0] = x;

以此類推 ……

陣列不能整體直接賦值,以下情況除外:

1. 初始化時賦值:

typedef struct star

char name[8];

char information[2][2];

}mx;

mx mx[2] = ,

}},//為了你能看清楚mx[0]分了三行,此處之前是mx[0],下面是mx[1]

,}}};

2. 把陣列放在結構裡,兩個結構可以直接賦值。

3. memcpy等方法。

需要注意幾點,

你的name是個位元組,所以如果name的大括號裡用「zhangsan」,會踩記憶體,初學者常犯的錯誤,因為這種賦值隱含了"\0",字串的截止符,換句話說你賦值zhangsan是8個byte+「\0」,這樣就超過name[8]了。

你可以嘗試指標×pname;

希望對你有所幫助。

2樓:匿名使用者

struct starmx=

3樓:匿名使用者

,},

4樓:滄海雄風

mx[2] =,};

c語言,結構體中的陣列怎麼賦值,?

5樓:念憶

intmain(void);

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

//structstudentsbao=;可以。第一種賦值方法

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

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

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

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

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

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

/*這樣可以,*/

//chararr[10]="baobao";

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

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

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

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

//還有就是memcpy函式也是可以

return0;}

6樓:yesyes科

1、首先開啟vs2010軟體,新建一個專案,如圖所示。

2、裡面包含標頭檔案,如圖所示。

3、然後輸入入口函式main。

4、接著定義一個結構體,宣告結構體變數,如圖所示。

5、然後給結構體裡面的成員變數賦值。

6、最後列印結構體成員,輸出結果就完成了。

7樓:問明

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

char a[8]=;

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

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

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

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

例如:char c=;

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

char diamond[5][5]=,,,

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

(2)字串常量初始化陣列。例如:

char c=;

可寫為:char c=;

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

char 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<10;i++)

a=getchar();

用scanf()賦值:

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

scanf("%c",&a);

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

scanf("%s",a);

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

輸入」c program「並回車時,a陣列會自動包含一個以」\0「結尾的字串」c program「。

字元陣列的輸出

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

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

a=putchar();

用printf()賦值:

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

printf("%c",a);

輸出結果為:

c program

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

printf("%s",a);

輸出結果為:

c program

8樓:老朱

s.a[0]=1;

s.a[1]=2;

9樓:

你程式中的那種賦值方式只能在陣列定義的時候賦值,定義完成後,就要一個一個的賦值。比如:s.

a[0] = 1;s.a[1] = 2;如果賦值有一定規律的話,可以用for迴圈;如果賦的值一樣的話,可以用 memset(s.a,0,sizeof(s.

a));,memset一般用於陣列初始化和清零。

10樓:匿名使用者

如果沒記錯的話只能是陣列初始定義的時候才可以這樣賦值。

只能一個一個賦值,s.a[0]=1; 這樣是合法的

想給陣列賦值的話用迴圈吧

11樓:army1椒rz迫

對於已經定義好了的陣列,肯定不能用這樣賦值啦,給結構體賦值其實就跟其他的變數賦值一樣,難道你可以

int a[3];

a=;這個給一個int陣列賦值嗎,不行啊。

正確的做法就是像其他變數一樣一個一個賦值,當然也可在結構體初始化時賦值

求助一個c語言結構體陣列賦初值的問題

12樓:匿名使用者

typedef struct _test  test;

對結構體賦值,一般是順序賦值,或者指定賦值比如test test = ,//對應id, name, level, stock, price, d

,//這個就是指定賦值,點後面接的是結構體成員名};

c語言 如何在結構體中給巢狀的結構體賦值?

13樓:自我程式設計

結構體巢狀,賦初值,大括號巢狀就可以了。

問題是你**寫錯了。

你定義的old1不是結構型別,而是結構變數。

在shuju中成員要寫struct old 變數名;

不能寫struct old1。

下面是演示**:(補充:如果想定義一個結構型別別名,要用typedef

#include

struct old

int year;

int month;

int day;

}old1=;

struct shuju

char name[10];

char gender[6];

int height;

struct old old1;

char access[9];

}shuju1=,"well"};

int main()

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

printf("結構變數shuju1中成員old1的初值:%d %d %d\n",shuju1.old1.

year,shuju1.old1.month,shuju1.

old1.day);

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

return 0;

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

typedef struct old

int year;

int month;

int day;

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

14樓:哼呀弟

, "well"};

15樓:匿名使用者

加個大括號試試 }

c語言,結構體中的陣列怎麼賦值,?

16樓:問明

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

char a[8]=;

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

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

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

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

例如:char c=;

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

char diamond[5][5]=,,,

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

(2)字串常量初始化陣列。例如:

char c=;

可寫為:char c=;

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

char 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<10;i++)

a=getchar();

用scanf()賦值:

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

scanf("%c",&a);

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

scanf("%s",a);

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

輸入」c program「並回車時,a陣列會自動包含一個以」\0「結尾的字串」c program「。

字元陣列的輸出

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

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

a=putchar();

用printf()賦值:

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

printf("%c",a);

輸出結果為:

c program

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

printf("%s",a);

輸出結果為:

c program

c語言二維陣列問題

寫完以後我發現有點長,樓主給點耐心看,不懂我們再交流 a是整個二維陣列的首地址,short長度為2,sizeof a 2 5 5 50 a 1指向二維陣列的第二個元素,它僅僅是一個指標,如果在a 1前面加一個 號,就是第二個元素的值,即a 0 1 所以,a 1是一個指標,它指向二維陣列中的某個數,指...

C語言,怎樣將二維陣列存入檔案

玄清佳 int main 比如說你要把它存到一個檔案中。現在你要現在你的源程式的目錄下建立一個比如說是data.txt檔案 現在開始寫程式 file fp if fp fopen data.txt w null 出錯處理 for int i 0 i 2 i for int j 0 j 3 j fpr...

c語言中指標做函式引數傳遞二維陣列

include void fun int p1 3 int p2 3 int main int p1 3 3 int p2 3 3 int i 0,j 0 fun p1,p2 for i 0 i 3 i for j 0 j 3 j printf d p2 i j printf n return 0 ...