一、数组与指针有什么关系
(1)地址
数组名就是一个地址,指向一个数组的开端。
从实验结果我们可以看出前三个地址都是一样的,都是数组的开始地址,而最后一个是数组的第二个元素,因为是整型数据,地址加4。
那么0[a] 1[a] 2[a]...n[a]又代表了什么
0[a]=a[0] 1[a]=a[1] n[a]=a[n];
为什么会这样呢 对比上方代码可知:
n[a]=*(n+a) *(n+a)=*(a+n) *(a+n)=a[n];
#include <stdio.h> int main() { int a[5] = { 7,0,8,5,1 }; int *p = a+2; printf("%d\n", *p++); printf("%d\n", *++p); printf("%d\n", (*p)++); printf("%d\n", ++(*p)); }
举例指针在数组中的使用:
#include <stdio.h> int main() { int *p, a[3], i; p = a; for (i = 0;i < 3;i++) scanf_s("%d", p++); printf("\n\n"); for (p = &a[0];p < a + 3;) printf("%d ", *p++); return 0; }
#include <stdio.h> int main() { int a[3][3] = { 1,2,3,4,5,6,7,8,9 }, *p; for (p = a[0];p < a[0] + 9;p++) //p=&a[0][0] printf("%d", *p); return 0; }
#include <stdio.h> int main() { int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; int(*p)[4]; p = a; int i, j; for (i = 0;i < 3;i++) { for (j = 0;j < 4;j++) printf("%d", p[i][j]); printf("\n"); } return 0; }
#include <stdio.h> int *fun(int *x, int *y) { if (*x < *y) return x; else return y; } main() { int a = 7, b = 8, *p, *q, *r; p = &a; q = &b; r = fun(p, q); printf("%d,%d,%d\n", *p, *q, *r); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)