c語言初始化結構體
1. c語言memset初始化結構體問題
1.memset函數的原型void *memset(void *s, char ch,size_tn);
函數的第一個形式參數是指針類型,所以實參因為一個地址,即&a
注意&a與a是不同的.a是結構體變數名,而&a是變數a的地址.
2.另外memset()是一個庫函數函數,需要加頭文件#include<string.h>
3.正如你所說的全局與主函數內定義變數a是有一點區別
源代碼如下:
#include<stdio.h>
#include<string.h>
typedef struct ss
{
int num;
int dir[5][3];
}tent;
//tent a;
int main()
{
tent a;
printf("a=%p
",a); //輸出的是變數的地址
printf("&a=%p
",&a);//注意a與&a的區別
memset(&a,0,sizeof(a));
return 0;
}
主函數內運行結果:
這個沒警告的.
已上在VC6.0下的結果
為嘛第二個沒警告,暫時不清楚.但第一個有警告是合理的.
2. C語言結構體數組初始化```從鍵盤輸入
/*
先這樣改,看看,int型7/4=1的,結果當然不如你所料了。
按照奶茶的把%d的改過來了。那個float和double的也有道理,但用不著改了。還有,你的輸入寫的不是很好,最好一項一項的輸入,我就不改了。
*/
#include<stdio.h>
struct STUDENT{
char name[20];
int age;
char sex;
int weight;
};
float aver(struct STUDENT *q,int n);
main()
{
struct STUDENT a[4];
struct STUDENT *p;
int i;
float ave;
p=a;
printf("請輸入四個學生的數據:\n");
for(i=0; i<4; i++)
{
p=a;
printf("請輸入第%d個學生的姓名:\n",i+1);
gets((p+i)->name);
printf("請輸入第%d個學生的年齡,性別和體重:\n",i+1);
scanf("%d%c%d",&((p+i)->age),&((p+i)->sex),&((p+i)->weight));
}
ave=aver(p,4);
printf("四個學生的平均年齡是:%f",ave);
}
float aver(struct STUDENT *q,int n)
{
int i,sum;
float ping;
sum=0;
for(i=0; i<n; i++,q++)
{
sum+=q->age;
}
ping= (float)sum/n;
return(ping);
}
3. c語言如何對結構體某一成員初始化
結構體與類一樣可以定義一個構造函數。
如下:
struct s{
s(){
a=0;
}
int a;
};
每次聲明一個結構體變數時都會調用結構體的構造函數,在構造函數裡面添加初始化語句就可以了
4. 如何對結構體變數進行初始化
結構體初始化可以再定義時制定初始值,如:
struct
student
{
int num;
char name[20];
} student1 =
{10001,"zhangxin"};
也可以採取申明類型與定義變數分開的形式,在定義變數時進行初始化:
student student1 =
{10001,"zhangxin"} 。
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data
type)的一類。
結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
5. c語言結構體初始化(編譯系統vs2010)
.location 這種叫按名稱初始化,是gun對c的擴展,只有gnu支持,就是linux下的編譯器支持(gcc, g++)
程序員寫代碼的時候,最好使用被廣泛支持的標准,盡量不要使用個別編譯器的私有定義。
關注優酷上的 」C學習指南「,在第10章里會講這個問題。
6. 關於C語言結構體構造函數初始化的問題
#include<iostream>
#include<string>
using std::cout;
using std::string;
class A{
string a;
public:
A(string ab="1wggg"){a=ab;}
string geta(){return a;}
};
void main()
{
A b;
cout<<b.geta();
}
7. C語言結構體里的結構體怎麼初始化
中間又有結構體嵌套,你的格式應該是{{
..{}..},{..{}..},...}
其實一般不這么初始化,定義全局靜態變數或者指針,指針的話通過malloc分配內存,然後通過->訪問結構體成員,靜態變數的通過.訪問成員,然後賦值。
8. C語言結構體里的結構體怎麼初始化
方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。
簡單變數的初始化形式如下:
數據類型 變數名=初始化值;
例如,定義整型變數a,並給其初始化值10的語句如下
int a=10;
數組的初始化,需要通過一常量數據列表,對其數組元素分別進行初始化,形式如下:
數據類型 數組名稱〔數組長度〕={初始化值1,初始化值2,…, 初始化值n};
例如,定義長度為5的整型數組,並對其初始化的語句如下:
int A[5]={20,21,0,3,4};
結構體變數的初始化方式與數組類似,分別給結構體的成員變數以初始值,而結構體成員變數的初始化遵循簡單變數或數組的初始化方法。具體的形式如下:
struct 結構體標識符
{
成員變數列表;
…
};
struct結構體標識符 變數名={初始化值1,初始化值2,…, 初始化值n };
例如,定義struct Point類型變數,並初始化的語句如下:
struct Point oP1={0.0,0.2,0.3};
struct Point類型變數oP1的三個成員變數的值分別為
oP1.x=0.0,
oP1.y=0.2
oP1.z=0.3
由於定義結構體變數有三種方法,因此初始化結構體變數的方法對應有三種,上面已經介紹了其中的一種形式,其他兩種形式如下:
struct Point
{
double x;
double y;
double z;
} oP1={0.0,0.2,0.3}; struct
{
double x;
double y;
double z;
} oP1={0.0,0.2,0.3};
在初始化結構體變數時候,既可以初始化其全部成員變數,也可以僅僅對其中部分的成員變數進行初始化。例如:
struct Student
{
long id;
char name[20];
char sex;
}a= {0};
其相當於a.id=0;a.name=「」;a.sex=『\0x0』。
僅僅對其中部分的成員變數進行初始化,要求初始化的數據至少有一個,其他沒有初始化的成員變數由系統完成初始化,為其提供預設的初始化值。
9. c語言怎麼結構數據初始化
C語言
結構體類型
變數初始化分為
普通變數
和
數組變數
兩種形式,說明如下:
typedef struct
{
int x,y;
}
direction
;
direction dir={1,2} ; //普通變數,用一組{}括起來,成員變數數據間以逗號分隔,按變數定義順序對應數值。未賦值成員,默認填0
direction move[8]={ //數組變數,整體用一組{}括起來,每一個元素按普通變數格式進行書寫,各元素間用逗號分隔。未賦值元素,默認填0
{0,0},{0,1},{1,0},{1,1},
{2,0},{2,1},{3,0},{3,1}
};
10. c語言結構體初始化
你已經定義了一個mem1,下一句又定義了一個mem1,所以它會提示你多次定義了,應該把第二個struct Mem去掉吧