C语言中,一个结构体的指针的数组,是什么? 举例
时间: 2024-03-10 15:43:15 浏览: 30
一个结构体的指针的数组是一个数组,每个元素都是指向该结构体的指针。
举例:
```
struct Person {
char name[20];
int age;
};
struct Person *people[3];
people[0] = malloc(sizeof(struct Person));
strcpy(people[0]->name, "Alice");
people[0]->age = 20;
people[1] = malloc(sizeof(struct Person));
strcpy(people[1]->name, "Bob");
people[1]->age = 25;
people[2] = malloc(sizeof(struct Person));
strcpy(people[2]->name, "Charlie");
people[2]->age = 30;
```
上述代码定义了一个结构体 `Person`,然后定义了一个 `people` 数组,每个元素都是指向 `Person` 结构体的指针。在这个例子中,我们使用 `malloc` 动态分配了3个 `Person` 结构体的内存空间,并将它们的指针存储在 `people` 数组中。然后我们可以通过 `people` 数组中的指针访问和修改每个人的信息。
相关问题
可以举例C语言里面的结构体指针吗
当然可以!在C语言中,结构体(struct)是一种自定义的数据类型,可以将不同类型的数据组合在一起形成一个新的数据类型。而结构体指针则是指向结构体变量的指针。
下面是一个示例:
```c
#include <stdio.h>
// 定义一个结构体
struct Person {
char name[50];
int age;
};
int main() {
// 声明一个结构体变量
struct Person person1;
// 使用结构体指针,指向结构体变量
struct Person *ptr = &person1;
// 通过指针访问结构体成员
printf("请输入姓名: ");
scanf("%s", ptr->name);
printf("请输入年龄: ");
scanf("%d", &(ptr->age));
// 打印结构体成员
printf("姓名: %s\n", ptr->name);
printf("年龄: %d\n", ptr->age);
return 0;
}
```
在上面的示例中,我们定义了一个结构体 `Person`,包含了姓名和年龄两个成员。然后,在主函数中声明了一个结构体变量 `person1`,并使用结构体指针 `ptr` 指向该变量。通过指针访问结构体成员时,使用箭头运算符 `->`。
你可以尝试运行这段代码,并输入姓名和年龄来验证它的工作方式。
C语言编程中关于结构体的面试题有哪些,请举例并给出答案
以下是一些关于C语言中结构体的面试题和答案:
1. 结构体和联合体有什么区别?
答案:结构体和联合体都是用户自定义的数据类型,但是它们的存储方式不同。结构体的各个成员都是独立的,每个成员都有自己的内存空间,而联合体的各个成员共用同一块内存空间。
2. 结构体对齐是什么?为什么需要对齐?
答案:结构体对齐是指编译器在分配结构体成员内存空间时,为了提高访问效率而进行的一种优化方式。由于硬件的读取速度与内存对齐有关,因此结构体对齐可以提高数据读取的效率。
3. 如何在结构体中定义位域?
答案:可以使用冒号运算符来定义位域。例如:
```
struct {
unsigned int a : 1;
unsigned int b : 2;
unsigned int c : 3;
} bitfield;
```
这样就定义了一个名为`bitfield`的结构体,其中包含了三个位域成员`a`、`b`和`c`,它们分别占据1、2和3个二进制位。
4. 结构体指针和结构体成员访问符号有什么区别?
答案:结构体指针用于访问整个结构体,而结构体成员访问符号用于访问结构体中的单个成员。例如:
```
struct student {
char name[20];
int age;
};
struct student stu1 = {"Tom", 18};
struct student *p = &stu1;
printf("%s\n", p->name); // 访问结构体指针中的name成员
printf("%d\n", (*p).age); // 访问结构体指针中的age成员
```
5. 结构体可以作为函数的参数和返回值吗?
答案:可以。结构体可以作为函数的参数和返回值,例如:
```
struct student {
char name[20];
int age;
};
struct student get_student_info() {
struct student stu = {"Tom", 18};
return stu;
}
void print_student_info(struct student stu) {
printf("name: %s, age: %d\n", stu.name, stu.age);
}
int main() {
struct student stu = get_student_info();
print_student_info(stu);
return 0;
}
```
这里定义了一个`student`结构体,包含了学生的姓名和年龄,然后在`get_student_info()`函数中返回了一个`student`类型的变量,最后在`main()`函数中调用了`print_student_info()`函数打印了该变量的信息。