c語言struct賦值
A. 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}};
====
[原創回答團]
B. 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. c語言結構體賦值問題
都不是,dev是一個指針,而filp->private_data = dev的意思是將dev的值賦值給filp->private_data,dev的值又只是&mem_devp[num]
的地址。所以這里只是把dev所指向的地址賦值給了filp->private_data
D. c語言中結構體賦值問題
printf("%s")函數接受字元串是用空格做結束符的,不能通過改變輸入來正確接收。建議使用gets()函數來接受帶有空格的字元串。還有就是字元的接收,如果此次接收字元之前有字元輸入,要在之前清空一次輸入緩沖區或者用getchar()把控制字元清楚掉。同時要消除本次輸入帶來的控制字元。
E. C語言中struct各個成員的賦值有順序嗎
單個成員賦值沒有順序,如果是結構數組,那麼數組初始值就有順序了
F. C語言怎麼給結構體里的結構體賦值
c裡面是不能這樣賦值的, 這種方式只有在定義的時候初始化才可以
如果 int a[][2] = { 2,2}這是正確的,但是定義數組之後再 a = { 2,2}是不正確的, 你還是一個一個賦值吧. 另外說明一下吧, 定義的時候是給變數申請內存, 編譯器會把你初始話的值賦值到內存, 但是如果 以後在賦值的時候, 就成了指針了, 語法就不正確了
m1->edges=
{
{0,1,0,0},
{1,0,1,0},
{0,1,0,1},
{0,0,1,0}
};
------
你可以把你要初始話的這個數組定義個const數組, 後面再用for來賦值吧, 沒有其他辦法
{
{0,1,0,0},
{1,0,1,0},
{0,1,0,1},
{0,0,1,0}
};
G. c語言結構體里的一個元素如何賦值
如果弄的是結構數組,那就給學好設置為負數表示無效記錄就可以了啊,循環的時候加上一個判斷,如果是鏈表或者樹,可以直接刪除的,
呵呵,不知道問的是不是這個意思
array[ i ].data = xxx;這樣可以嗎?
array[ i ]需要改變的結構
array[ i ].data 該結構的元素
xxx新的值
不知道是不是這個意思,呵呵,如果用vc就應該沒問題啊
H. 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。