VS2010-C++-结构体变量和数组的定义&初始化&作做函数参数&作返回值

1.结构体变量(定义,初始化,作函数参数,作返回值)

(1)定义结构体变量

其中一种方法是利用typedef 定义:

(利用typedef)给结构体类型struct FUNCADATA定义别名:FuncaData

typedef struct FUNCADATA
{
	int Num1;
	char name1[20];
    char sex;
}FuncaData;//FuncaData 相当于struct FUNCADATA的别名

(2)初始化结构体变量

//1.先定义再赋值
	FuncaData Data1;
	Data1.Num1 = 0;
    Data1.sex = 'M';
	strcpy(Data1.Name1, "lili");//error:Data1.name1 = "LILI";
	

	//定义时初始化
	FuncaData Data2 = {1, "lili", 'M'};	//2.完全初始化
	FuncaData Data3 = {2};			    //3.部分初始化

(3)结构体构造函数 


typedef struct FUNCABDATA
{
	int Num2;
	char Name2[20];
    char sex;

	FUNCABDATA()
	{
		Num2 = 0;
		strcpy(Name2, "lili");//error:name2 = "lili";
        sex = 'M';
	}
}FuncabData;

(4)结构体变量作函数参数,值传递

注:结构体值传递,函数内部修改不会改变原结构体

void SaveData1(FuncaData Data)
{
	int n = Data.Num1;
	char name[10];
	strcpy(name, Data.Name1);
	char sex = Data.sex;

//	error:结构体值传递,函数内部修改不会改变原结构体
// 	Data.Num1 = 1;
// 	strcpy(Data.Name1, "lili2");
}

调用:
FuncaData Data1 = {0, "lili", 'M'};
SaveData1(Data1);

(5) 结构体变量作函数参数,指针传递

void SaveData2(FuncaData* Data)
{
	Data->Num1 = 2;
	strcpy(Data->Name1, "lili2");
	Data->sex = 'M';
}

调用:
FuncaData Data5 ={1, "lili", 'M'};	//Data5: 1, lili, M
SaveData2(&Data5);					//Data5: 2, lili2, M

若在指针传递中不想改变原结构体数据,可以使用const,表示只读

void SaveData2(const FuncaData* Data)
{
//  error:const只读,不可修改
// 	Data->Num1 = 2;
// 	strcpy(Data->Name1, "lili2");
// 	Data->sex = 'M';
}

调用:
FuncaData Data7 ={1, "lili", 'M'};	//Data7: 1, lili, M
SaveData2(&Data7);					//Data7: 1, lili, M

(6) 结构体变量作返回值

FuncaData SaveData3(FuncaData Data)
{
	Data.Num1 = 2;
	strcpy(Data.Name1, "lili2");
	Data.sex = 'M';
	return Data;
}

调用:
FuncaData Data6 ={1, "lili", 'M'};	//Data6: 1, lili, M
Data6 = SaveData3(Data6);			//Data6: 2, lili2, M

2.结构体数组(定义,初始化,作函数参数,作返回值)

(1)定义结构体数组:和定义结构体变量一致,参考以上

typedef struct FUNCADATA
{
	int Num1;
	char Name1[20];
	char sex;

}FuncaData;

(2)初始化结构体数组

//1.先定义再赋值
	FuncaData szData1[10];
	for (int i=0; i<10; i++)
	{
		szData1[i].Num1 = 0;
		strcpy(szData1[i].Name1, "lili");
        szData1[i].sex = 'M';
	}

//2.定义时初始化
    FuncaData szData2[2] = {{1, "lili", 'M'}, {2, "lili2", 'M'}};

3.结构体数组作函数参数

void SaveDatas1(int iDataCount, FuncaData* Data)
{
	int n[100];
	char name[100][10];
	char sex[100];
	for (int i=0; i<iDataCount; i++)
	{
		n[i] = Data[i].Num1;
		strcpy(name[i], Data[i].Name1);
		sex[i] = Data[i].sex;
	}

	Data[0].Num1 = 3;
	strcpy(Data[0].Name1, "lili3");
	Data[0].sex = 'F';
}

调用:
FuncaData szData2[2] = {{1, "lili", 'M'}, {2, "lili2", 'M'}};
SaveDatas1(sizeof(szData2)/sizeof(szData2[0]), szData2);

//before szData2:{1, "lili", 'M'}, {2, "lili2", 'M'}
//after szData2:{3, "lili3", 'F'}, {2, "lili2", 'M'}

注:sizeof(结构体)不等于结构体内所有成员占内存字节数只和

sizeof(类型) 等于该类型所占内存字节数

1.
typedef struct SDATA
{
	int Num1;
}SData;

调用:
int n = sizeof(SData); //4


2.
typedef struct SDATA
{
	char Name1[20];
}SData;

调用:
int n = sizeof(SData); //20


3.
typedef struct SDATA
{
	char sex;

}SData;

调用:
int n = sizeof(SData); //1


4.
typedef struct SDATA
{
	int Num1;
	char Name1[20];
	char sex;

}SData;

调用:
int n = sizeof(SData); //28

结构体的定义参考:结构体的使用_vs2010 结构体定义和使用-CSDN博客

结构体的初始化参考:

1.结构体的几种初始化方法_结构体初始化-CSDN博客

2.C语言结构体的定义,初始化,赋值,并与数组,指针,typedef的联合使用_c语言 typedef void 指针-CSDN博客

3.C | struct结构体 | 结构体数组 | typedef struct | 结构体初始化 | 结构体构造函数 | 结构体嵌套_结构体数组初始化赋值方式-CSDN博客

结构体做函数参数参考:

.1.结构体作为函数的参数_结构体可以用作函数参数吗-CSDN博客

2.结构体和数据结构--向函数传递结构体_结构体传递给函数-CSDN博客

3.【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 栈内存创建 )_c语言结构体数组作为函数参数-CSDN博客

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值