C 语言指针从入门到避坑:把指针踩在脚底(3)

发布时间:2026/9/25 18:57:19
C 语言指针从入门到避坑:把指针踩在脚底(3) 数组名的理解数组名在一般情况下是数组首元素的地址不过两种特殊情况sizeof(数组名此时数组名代表的是整个数组而此时sizeof的结果是数组的大小字节数组名此时数组名也代表整个数组此时的结果是整个数组的地址虽然打印的结果相同但数组首元素的地址 数组的地址具体体现在arr1和arr1的不同。使用指针访问数组当我们使用指针打印数组时通常采用以下写法intmain(){inti0;intarr[10]{1,2,3,4,5,6,7,8,9,10};int*parr;for(i0;i10;i){printf(%d\n,*(pi);结合以前的写法我们可知arr[i]*(arri)*(pi)所以可以看出通过下标访问数组的本质就是通过指针访问数组。结合加法交换律*(arri)*(iarr)。而[]和加号都是操作符。结合上述特性可以推算出arr[i]i[arr]只不过前者的写法便于人理解。一维数组传参的本质一维数组传参本质传的是数组的第一个元素的地址。所以在传入数组时函数的形参有两种写法。//创建一个数组intmain(){intarr[10]{0};test(arr);}voidtest(int*arr);//这是直接接受了数组的第一个元素的地址voidtest(intarr[10]);//这种写法也可以便于理解此外因为传入的是数组第一个元素的地址所以函数内部不能计算数组的个数如果函数内部要用到数组个数的话要额外传入。intmain(){intarr[10]{0};intszsizeof(arr)/sizeof(arr[]);test(arr,sz);}voidtest(int*arr,intsz);在传入数组前数组还是数组在传入后数组变成指针了这种现象叫做数组降级二级指针intmain(){inta0;int*pa;//一级指针变量int**ppp;//二级指针变量对二级指针变量int** pp的理解int**其中int*表示指针变量所指对象是int*类型的*表示pp是一个指针变量二级指针变量的解引用inta5;int*pa;int**ppp;//其中*ppp;而*pa所以**ppa指针数组的理解指针数组是指针还是数组类比intarr[5]{0};//整型数组——用来存放整型数据的数组chararr[5]{0};//字符数组——用来存放字符数据的数组//类比上述数组int*arr[5]{0};//指针数组——用来存放指针数据的数组我们还可以通过更生动的图像来理解指针数组模拟二维数组二维数组是一维数组“拼接”成的二维数组的每一行都可以看成一维数组。在这层理解下我们可以用指针来模拟二维数组。intmain(){intarr1[5]{12345};intarr2[5]{12345};intarr3[5]{12345};int*parr[3]{arr1,arr2,arr3};//数组名是数组中首元素的地址inti0;intj0;for(i0;i3;i){for(j0;j5;j){printf(%d,parr[i][j]);//每一个一维数组中元素地址是连续存放的}}return0;}图解这里我们模拟出了二维指针的效果但是行间并不连续所以这并不是真正的二维指针。目录数组名的理解使用指针访问数组一维数组传参的本质二级指针二级指针变量的解引用指针数组的理解指针数组模拟二维数组

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询