1.访问数组第一个元素
当将结构体数组名赋给指针时,指针指向数组的第一个元素。这是因为在内存中,数组的元素是连续存储的,数组名代表数组的首地址。所以,将结构体数组名赋给指针后,指针会指向数组的第一个元素的地址。
下面是一个示例代码,演示了将结构体数组名赋给指针的情况:
#include <stdio.h>
struct Student {
char name[20];
int age;
};
int main() {
struct Student students[3] = {
{"Alice", 18},
{"Bob", 19},
{"Charlie", 20}
};
struct Student *ptr = students; // 将结构体数组名赋给指针
printf("First student's name: %s\n", ptr->name); // 访问第一个学生的名字
printf("First student's age: %d\n", ptr->age); // 访问第一个学生的年龄
return 0;
}
在上面的代码中,struct Student *ptr = students;
将结构体数组students
的名字赋给指针ptr
,此时ptr
指向数组的第一个元素。我们可以通过ptr->name
和ptr->age
访问第一个学生的名字和年龄。
2.访问数组后面元素
要通过指针访问数组中的后续元素,可以使用指针的偏移操作。指针可以通过递增或递减来指向数组中的下一个或上一个元素。
下面是一个示例代码,演示了如何使用指针访问数组中的后续元素:
#include <stdio.h>
struct Student {
char name[20];
int age;
};
int main() {
struct Student students[3] = {
{"Alice", 18},
{"Bob", 19},
{"Charlie", 20}
};
struct Student *ptr = students; // 将结构体数组名赋给指针
// 通过指针访问后续元素
printf("Second student's name: %s\n", (ptr + 1)->name); // 访问第二个学生的名字
printf("Second student's age: %d\n", (ptr + 1)->age); // 访问第二个学生的年龄
printf("Third student's name: %s\n", (ptr + 2)->name); // 访问第三个学生的名字
printf("Third student's age: %d\n", (ptr + 2)->age); // 访问第三个学生的年龄
return 0;
}
在上面的代码中,(ptr + 1)
表示指针向后移动一个元素,(ptr + 2)
表示指针向后移动两个元素。通过(ptr + 1)->name
和(ptr + 1)->age
可以访问第二个学生的名字和年龄,通过(ptr + 2)->name
和(ptr + 2)->age
可以访问第三个学生的名字和年龄。