c语言数组指针定义,c语言数组指针定义是什么

dfnjsfkhak 13 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言数组指针定义问题,于是小编就整理了2个相关介绍c语言数组指针定义的解答,让我们一起看看吧。

  1. C语言中指针数组和数组指针、函数指针、指向函数的指针等等该怎么理解?
  2. 指针数组和数组指针的区别?

C语言中指针数组和数组指针、函数指针、指向函数的指针等等该怎么理解?

指针数组是说这个数组是指针型的,这个数组里面存的数据是指针型数据。

数组指针:是说这个指针是指向数组的。

c语言数组指针定义,c语言数组指针定义是什么-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

函数指针和指向函数的指针应该是一样的吧。都是说指针,这个指针指向函数

如果老师有一个表格,表格上就是本班学生名字,这是普通数组;如果把名字改为学生的住址,就是指针数组;如果老师有很多这类(写着学生住址)的表格,并且每个表格需要单独放在一个地方,这个地方就是数组指针;如果你发现某些地址不是直接写,而是“小明家对面”;“小红家的隔壁”,之类的,这种描述就是指针函数;而“小明家对面”对应的真实地址,就是指向函数的指针。

对于C语言的指针,其实不难理解。

c语言数组指针定义,c语言数组指针定义是什么-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

万变不离其宗,最简单的理解指针就是“地址”,无论什么类型的指针(整数,数组,字符串,函数等),指针的值都是一个整形数值,是所指向的一个此类型实际变量内存中的首地址。

因此,不管如何花哨的名字,指针就是一个内存地址而已,如,字符指针是一个字符串的内存首地址,函数指针无非是一个函数在内存的首地址,通过这个地址,可以对对应变量进行操作

所谓指针数组,首先是个数组,只是用来保存指针的数组,就是一个保存若干个指针地址的数组而已。

c语言数组指针定义,c语言数组指针定义是什么-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

从实际情况看,指针的价值有几点,一是提供了一种”按位置顺序”操作变量的方式,二是在函数调用时,提供了被调用函数形参和调用函数实参的统一,增加了程序灵活性,简化了变量的使用,可以说,C语言的指针,是其是最具生命力和最有价值的特性之一,相比其他语言,在开发中大型应用时提供非常高的效率,也是其他开发语言无法具备的。

指针的灵活性和简化的特点,弊端是增加了程序执行的风险,。

在C语言中,指针是最容易造成内存越界而程序崩溃的因素,因此需要特别小心。

因此,在实际开发中,除非特别必要,对指针的使用要慎重,以免增加运行的风险和维护的难度。实际场景中,指针最适合用在 ”首地址+偏移量”类操作能带来更便捷或性能提升很多的情况,最典型的如字符串处理操作,否则的话,如可以不用指针,则尽量不要用。

指针数组和数组指针的区别?

数组指针(也称行指针)
定义 int (*p)[n];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

如要将二维数组赋给一指针,应这样赋值
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个的一维数组。
p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

所以数组指针也称指向一维数组的指针,亦称行指针。

指针数组
定义 int *p[n];
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i=0;i<3;i++)
p[i]=a[i]
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]所以要分别赋值。

这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。
比如要表示数组中i行j列一个元素:
*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]

优先级:()>[]>*

到此,以上就是小编对于c语言数组指针定义的问题就介绍到这了,希望介绍关于c语言数组指针定义的2点解答对大家有用

标签: 指针 数组 一个