指针数组和数组指针
指针数组
概念
指针数组:首先它是一个数组,数组里面的元素存放的是指针
定义
例如:
int *p1[5]
由于 []
的优先级比 *
的优先级高,所以先组成 p1[5]
,构成一个数组的定义,数组名为 p1
,而 int *
修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个 指向 int
类型数据的指针。
测试代码
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("hello tyustli\r\n");
int *p1[5];/* p1 是一个指针数组,数组的内容是指向 int 的指针 */
char *p2[5] = {"hello", "world", "tyustli", "aaaaaaaaaa", "bbbbbbbbbb"};
int value0 = 0x11;
int value1 = 0x22;
int value2 = 0x33;
int value3 = 0x44;
int value4 = 0x55;
p1[0] = &value0;
p1[1] = &value1;
p1[2] = &value2;
p1[3] = &value3;
p1[4] = &value4;
printf("%s\r\n", p2[3]); /* p2 是一个数组, p2[0] 是数组的第一个元素,该元素存放的是 char 类型的指针 */
for(int i = 0; i < 5; i++)
{
printf("0x%x ", *p1[i]);
printf("%p ", p1[i]);
printf("\r\n");
}
return 1;
}
/*
编译:gcc -o out test.c
运行:./out
运行结果:
hello tyustli
aaaaaaaaaa
0x11 0x7ffff1788328
0x22 0x7ffff178832c
0x33 0x7ffff1788330
0x44 0x7ffff1788334
0x55 0x7ffff1788338
*/
数组指针
概念
数组指针:首先它是一个指针,指针指向的是一个数组
定义
int (*p1)[5]
()
的优先级比 []
优先级高,所以 *p1
是一个指针,指针变量名为 p1
,int
修饰的是数组的内容,即数组的每个元素,也就是说 p1
是一个指针,它指向一个包含 5
个整型元素的数组
测试代码
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("hello tyustli\r\n");
int array[5] = {0x11, 0x22, 0x33, 0x44, 0x55};
int(*p1)[5]; /* p1 是一个数组指针,指向的是一个数组 */
p1 = &array;
for (int i = 0; i < 5; i++)
{
printf("0x%x ", (*p1)[i]); /* p1 是一个指针 指向的是一个数组, *p1 是一个数组, 所以可以使用下表访问数组的值 */
}
printf("\r\n");
return 1;
}
/*
编译:gcc -o out test.c
运行:./out
运行结果:
hello tyustli
0x11 0x22 0x33 0x44 0x55
*/