数组指针、指针数组

指针的概念

  1. 指针就是一个变量,用来存放地址,地址唯一标识一块内存空间
  2. 指针的大小是固定的由操作系统的位数决定在32位平台(64位平台)下是4(8)。
  3. 指针是有类型的指针的类型决定了指针+-的步长,也决定了解引用时访问的权限(一个字符指针访问一个字节,一个整形指针访问四个字节)。





数组指针与指针数组

数组指针是一个指针。
指针数组是一个数组,数组的每个元素的是一个指针。
int *p1;
char *p2;

在上面代码中p1是整形指针——指向整形的指针

p2是字符指针——指向字符的指针

也就是说数组指针就是一个指针——指向数组的指针

数组指针存放的是数组的地址,数组的地址也是首元素地址

而指针数组就是一个数组,数组的每个元素都是一个指针

定义数组指针与指针数组

int arr[10];

int *p1[10];          //指针数组

int (*p2)[10];        //数组指针

代码中的p1是一个指针数组,而p2是数组指针
就像上面的int arr[10]在这条语句中arr[10]表示他是一个数组 int则是这个数组元素的类型。

在上面第二条语句中由于*与[]的优先级不同,[]的优先级大于*    p1先与[]结合表示它是一个数组,数组元素有10个,其数组元素的类型就是int* 。

而下面的int(*p2)[10]将*p2括起来 表示是一个指针

如同int *p一样*p表示是一个指针,指向的是int型

那么这里的(*p2)也表示是一个指针其指向的是 有10个整形的数组元素(即int   [10])的数组。

例:

int* (*p)[10];
//数组指针 指向一个数组元素有10个、每个元素是一个整形指针的数组

int*(*p[5])[10]; 
//指针数组——指向一个元素为五个、每个元素都是一个指向 元素有十个每个元素都是一个整形指针 的数组
好的!以下是关于“数组指针”和“指针数组”的详细介绍: ### 数组指针 (Pointer to an Array) 数组指针是一个指向整个数组指针。它存储的是数组首元素的地址,并可以访问整个数组的内容。 **特点:** - 它是指向整个数组的一个指针变量,而不是单个元素。 - 声明形式通常为 `type (*pointer_name)[size]`,其中 `type` 表示数据类型,`size` 是数组大小。 例如: ```c int arr[5] = {1, 2, 3, 4, 5}; int (*pArr)[5] = &arr; // pArr 是一个指向包含 5 个 int 的数组指针 printf("%d", (*pArr)[2]); // 输出 3,即数组第 3 个元素 ``` --- ### 指针数组 (Array of Pointers) 指针数组是一组连续内存空间中的多个指针变量。每个指针都可以独立地指向其他类型的变量、函数或其他对象。 **特点:** - 这本质上是一个普通的数组,其每个元素都是一个指针。 - 声明形式通常是 `type *array_name[size]`,表示该数组有 `size` 个指针。 例如: ```c char *strs[3]; // strs 是一个含有 3 个 char* 类型的指针数组 strs[0] = "Hello"; strs[1] = "World"; strs[2] = "C语言"; for(int i=0;i<3;i++) { printf("%s\n", strs[i]); } // 输出结果依次为 Hello World C语言 ``` --- 总结来说,“数组指针”和“指针数组”虽然听起来类似,但它们有着本质的区别:“数组指针”是指向整个数组的单一指针;而“指针数组”则是由多个指针组成的普通数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值