关于C语言结构体构造函数初始化的问题? c语言中结构体的作用
c语言如何对结构体某一成员初始化
有以下几种方法:
1 使用构造函数。
在C++中,struct可以当做类(class)来使用,同样支持成员函数,构造函数,析构函数。所以可以写对应的构造函数,实现自由初始化。
2 定义时,按照成员变量位置,写初始化列表。
如struct test中有成员int a, char b, 和float c,那么初始化一个变量可以写作
struct test t1 = {100, 'A', 1.23};
当初始化列表不全时,省略部分自动初始化为0,即
struct test t1 = {100, 'A'};
和
struct test t1 = {100, 'A', 0};
等效。
3 部分编译器支持显示成员变量初始化,如g++。
如
struct test t1 = {.b= 'A', .a=100};
没有涉及到的变量初始化为0.该种方式不是所有编译器都支持,当代码有跨平台需求时需谨慎使用。
C语言结构体里的结构体怎么初始化
中间又有结构体嵌套,你的格式应该是{{ ..{}..},{..{}..},...}
其实一般不这么初始化,定义全局静态变量或者指针,指针的话通过malloc分配内存,然后通过->访问结构体成员,静态变量的通过.访问成员,然后赋值。
关于结构体初始化
这个是有原理的。
简单说一下吧:
1.要从数组开始说。
比如int a[10]={0};其实系统只是把第一个数赋值为0,其他的数因为没有参数,系统自动初始化为0,对于int型来说。对于char来说就是‘\0x0’。其他的类型类似。
如果是int a[10]={1};那么就是第一个数是1,其他的数是0。就是1,0,0,0.......
2.下面到结构。结构和数组有点类似;
比如:
typedef struct Text{
int a;
float b;
char c[10];
}text;
如果我写了text temp={1,2,"mmm"};那么就可以正常全部初始化成功,参数符合。
如果我写了text temp1={1};那么就会变成给这个结构固定的参数赋值,这里是给a赋值,其他的参数类似数组全部系统自己初始化。
那么如果写了text temp2={};?就会变成直接全部系统初始化。具体类似于int a[10]={};
参考资料:blog.csdn/s_k_yliu/article/details/7020746
可以参考代码:
测试平台:Devc++
#include<stdio.h>
#include<math.h>
typedef struct Text{
int a;
float b;
char c[10];
}text;
int main(){
int a[10]={};
int b[10]={0};
int c[10]={1};
int i;
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
for(i=0;i<10;i++)
printf("%d",b[i]);
printf("\n");
for(i=0;i<10;i++)
printf("%d",c[i]);
printf("\n");
text temp={1,2.0,"shi"};
printf("%d %f %s\n",temp.a,temp.b,temp.c);
text temp1={1};
printf("%d %d %s\n",temp1.a,temp1.b,temp1.c);
text temp2={};
printf("%d %d %s\n",temp2.a,temp2.b,temp2.c);
return 0;
}
c语言怎么结构数据初始化?
C语言结构体类型变量初始化分为 普通变量 和 数组变量 两种形式,说明如下:
1
2
3
4
5
6
7
8
9
typedefstruct
{
intx,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}
};