C语言指针访问结构体数组
2022-0107 blog_009
指针变量p_bookInfo 可以指向一个结构体数组BookArr, 这时p_bookInfo 指向的是BookArr的首地址;
p_bookInfo 在循环中自加1之后,指针指向结构体数组的下一个元素;
注意这里的指针加1,并不是单纯的数值加1
首先看下指针的定义:
struct BookInfo* p_bookInfo = BookArr;
1- p_bookInfo 是个结构体类型的指针,所以才能指向结构体类型的数组或变量;
2- 指向数组时,也不是指的整个数组空间,而是数组其中一个元素的地址;
3- 当指针移动时,指向的是数组下一个元素的地址,而这个元素包含了结构体的三个参数值;
下面是一个简单的例子:
#include <stdio.h>
int main(void)
{
// define a struct
struct BookInfo
{
int book_id;
char book_name[128];
char book_author[128];
}BookArr[3] = { {1101, "110a", "aaa"}, {1102, "110b", "bbb"}, {1103, "110c", "ccc"} };
// init struct array :BookArr
// pointer to the first address of structure array
struct BookInfo* p_bookInfo = BookArr;
// move pointer by a loop
for (int i = 0; i < 3; i++, p_bookInfo++)
{
printf("book info :%d, %s, %s\n", p_bookInfo->book_id, p_bookInfo->book_name, p_bookInfo->book_author);
}
return 0;
}
运行结果: