一个数组就是一个地址,一个指针就是一个地址的地址

本文深入探讨了数组与指针在计算机编程中的本质区别与联系,解释了使用数组索引与指针访问数据的方式,并强调了定义和声明的一致性原则。通过实例解析,帮助开发者更清晰地掌握这一核心概念。

一个数组就是一个地址,一个指针就是一个地址的地址


1)用a[i]这样的形式对数组进行访问总是被编译器解释为像*(a+i)这样的指针访问。
2)指针始终是指针。它绝不可以改成数组,你可以用下标形式访问指针,一般都是指针作为函数参数时,而且你知道实际传递给函数的是一个数组。3)把一个数组定义为函数的参数时,可以选择把它定义为数组,也可以定义为指针;不管是哪种,在函数内部获得的都是一个指针。4)在其他所有情况中,定义和声明必修匹配。如果定义了一个数组,在其它文件对它进行声明时也必须把它声明为数组,指针也是如此。


via:http://blog.youkuaiyun.com/xiao3404/article/details/22590945

### 数组指针指针数组的区别及使用方法 #### 区别概述 数组指针指针数组是两种不同的概念,尽管它们都涉及到指针数组的操作。数组指针一个指向数组指针变量[^1],而指针数组一个指针组成的数组[^2]。 #### 数组指针 数组指针一个指针变量,它指向一个数组的首地址。定义数组指针时,需要明确指针指向的数据类型以及数组的大小。例如,在C语言中,可以通过以下方式定义一个数组指针: ```c int arr[5] = {1, 2, 3, 4, 5}; int (*p)[5] = &arr; // 定义一个指向包含5个整数的数组指针 ``` 通过这种方式,`p` 指向了整个数组 `arr` 的首地址,而不是单个元素[^1]。 #### 指针数组 指针数组一个数组,其中每个元素都是一个指针。这些指针可以指向不同类型的变量或数据结构。例如,定义一个指向整数的指针数组如下: ```c int a = 10, b = 20, c = 30; int *ptrArray[3]; // 定义一个包含3个指针数组 ptrArray[0] = &a; ptrArray[1] = &b; ptrArray[2] = &c; ``` 在这个例子中,`ptrArray` 是一个指针数组,它的每个元素分别指向变量 `a`、`b` 和 `c` 的地址[^2]。 #### 使用方法对比 - **数组指针**:当需要操作整个数组时,使用数组指针可以更高效地传递数组信息。例如,将数组作为函数参数传递时,可以传递数组指针而非单个元素的指针。 - **指针数组**:当需要管理多个独立的变量或数据结构时,指针数组提供了灵活的方式。例如,可以使用指针数组来存储多个字符串或动态分配的内存块的地址。 #### 示例代码 以下是一个综合示例,展示如何使用数组指针指针数组: ```c #include <stdio.h> void printArray(int (*arrPtr)[5], int size) { for (int i = 0; i < size; i++) { printf("%d ", (*arrPtr)[i]); } printf("\n"); } int main() { int arr[5] = {1, 2, 3, 4, 5}; int (*p)[5] = &arr; // 数组指针 int a = 10, b = 20, c = 30; int *ptrArray[3]; // 指针数组 ptrArray[0] = &a; ptrArray[1] = &b; ptrArray[2] = &c; printArray(p, 5); // 使用数组指针传递数组 for (int i = 0; i < 3; i++) { printf("%d ", *ptrArray[i]); // 使用指针数组访问变量 } printf("\n"); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值