指针数组
定义
指针数组是一个数组,其中每个元素都是一个指针
指针数组就是一个数组,它的元素类型是指针
声明方式
int *arr[10];
arr是一个数组,包含10个元素,每个元素都是一个指向int类型的指针。
arr[i]是一个指针,可以指向一个int类型的变量
使用场景
指针数组通常用于保存多个地址,例如字符串数组,其中每个元素可以指向一个字符串的起始位置
char *s[] = {"hello","linux","world"};
这里的s是一个指针数组,数组中的每个元素都是指向字符数组(字符串)的指针
s[1]存储的是字符串hello的起始地址
s[2]存储的是字符串linux的起始地址
s[3]存储的是字符串world的起始地址
每个s[i]都是一个指向字符数组的指针(即字符串),而s本身是一个指针数组
访问元素
char c = s[2][0];
这个表达式首先访问s[2]获得字符串"world"的地址,然后通过[0]访问字符串中的第一个字符
c = 'w'
数组指针
定义
数组指针是一个指针,它指向一个数组
与指针数组不同的是,指针数组本身是一个单一的指针,而不是一个数组
声明方式
int (*p)[10];
这里的p是一个指针,它指向一个包含10个int类型元素的数组。
p是指向数组的指针,而不是指针的数组
int arr[5] = {1,2,3,4,5};
int (*p)[5] = &arr;
p是一个指向包含5个int元素的数组的指针,它指向整个数组arr,而不是单个元素
访问元素
int value = (*p)[2];//3
这个表达式中:*p解引用数组指针p,得到arr数组,然后[2]访问数组的第三个元素
使用场景
数组指针常用于处理多维数组或在函数中传递数组时保留数组的维度信息
int arr[10];
int (*p)[10] = &arr;
这里p是指向数组arr的指针
区分
指针数组
int * arr[10];
arr是一个包含10个指向int类型数据的指针的数组
arr[i]表示第i个指针,可以解引用访问到具体的int数据,例如*arr[i]
常用于处理字符串数组、指针表或函数指针数组。例如处理多个字符串,或者创建一个数组,其中每个元素都是一个指向函数的指针
数组指针
int (*p)[10];
p是一个指向包含10个int类型元素的数组的指针
(*p)[i]表示数组中的第i个元素
常用于在函数中传递多维数组,保持数组的维度信息。尤其是在处理动态数组或矩阵时非常有用