1、结构体数组的定义
以自定义类型的数组作结构变量,该数组中每一个元素都是相同的自定义结构,具有相同的结构成员。
结构体数组在 结构体末尾定义或函数外定义都为全局变量, 函数内定义 为局部变量。
例如,下面代码段,People[10] 与 Person[10] 为全局变量,而main函数中的 Someone[10]为局部变量。
struct Node
{
char name[20];
char sex[10];
int age;
}People[10];//全局
struct Node Person[10];//全局
int main()
{
struct Node Someone[10];//局部
return 0;
}
2、结构体数组的初始化与调用访问
1)初始化
与普通数组初始化相似,只有在定义时初始化可对多个元素进行输入,其他时候只能通过访问输入 或 对单个元素进行输入。
struct Node
{
char name[20];
char sex[10];
int age;
/*在定义时初始化*/
}People[10] = { {"张三","男",23},{"李四","女",25}};
struct Node Person[10] = { {"王五","男",33},{"路人","?",28} };
int main()
{
struct Node Someone[10];
Someone[1] = { "sad","sdd",34};
Someone[2].name = "卡卡";
return 0;
}
2) 调用访问
访问结构体数组元素用“ . ”,如:
Someone[2].name = "卡卡";
People[2].age
当用一个指向结构体数组的指针时也可用“ —> ”,如:
struct Node* p, *q;
//q指向 结构数组Person的第2个元素
q = &Person[1];
//访问输出:
cout << q->name << " " << q->age << endl;
//p指向 结构数组Someone
p = Someone;
//访问输出: Someone的第2个元素
cout << (p + 1)->name << " " << (p + 1)->age << endl;
3)结构体数组作形参
形参表中:自定义结构类型名 + 数组名[ ]
void Visit(Node Someone[])
{
cout << Someone[1].name << " " << Someone[1].age << endl;
}
!!!注意:不要返回局部变量的地址,局部变量存放在栈区,栈区数据在函数执行完一次后 编译器就会自动释放掉(虽然会做一次保留),如果再次访问该地址 或 该地址上的 变量就会 出错。
E N D
代码用例:
#include<iostream>
#include<string.h>
using namespace std;
struct Node
{
string name;
string sex;
int age;
}People[10] = { {"张三","男",23},{"李四","女",25}};
struct Node Person[10] = { {"王五","男",33},{"路人","?",28} };
void Visit(Node Someone[])
{
cout << Someone[1].name << " " << Someone[1].age << endl;
}
int main()
{
struct Node Someone[10];
Someone[1] = { "瓦坎达啃大瓜","男",34};
Someone[2].name = "卡卡";
struct Node* p, *q;
//q指向 结构数组Person的第2个元素
q = &Person[1];
//访问输出:
cout << q->name << " " << q->age << endl;
//p指向 结构数组Someone
p = Someone;
//访问输出: Someone的第一个元素
cout << (p + 1)->name << " " << (p + 1)->age << endl;
Visit(Someone);
return 0;
}