当前位置:首页 > 前端设计 > 正文

指针数组和数组指针的定义?数组指针和指针数组有啥区别

指针数组和数组指针的定义?数组指针和指针数组有啥区别

大家好,如果您还对指针数组和数组指针的定义不太了解,没有关系,今天就由本站为大家分享指针数组和数组指针的定义的知识,包括数组指针和指针数组有啥区别的问题都会给大家分析到...

大家好,如果您还对指针数组和数组指针的定义不太了解,没有关系,今天就由本站为大家分享指针数组和数组指针的定义的知识,包括数组指针和指针数组有啥区别的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

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

要理解这些问题首先需要理解什么是指针和指针变量。

在C语言中我们可以认为指针就是地址,不过是某一个具体内存单元的地址。

如我们在c语言中定义了一个int型变量a:

inta;

那么计算机就会给a分配4个字节的地址(在vc++中,在某些版本的c语言中,可能是2个字节)来存放a的值。由于在内存中每个字节都有一个地址,那么哪个地址是a的地址呢?我们不能同时用4个地址来表示a的地址吧,所以在c语言中,我们拿这块空间(4个字节)的第一个字节的地址当作变量a的地址,也就是首地址。

然后我们在定义一个指针变量,如:

int*p;

再用取地址运算符把a的首地址取出来赋值给指针变量p,如:

p=&a;

现在指针变量p里存放的就是a的地址,我们就称p是a的指针。

所以,指针数组是什么?

就是一个数组里,每个数组元素都存放的是指针类型的值,也就是地址值。而不是基本数据类型,如:整型、实型、字符型。定义一个指针数组的方法如下:

int*pa[10];

其中pa是数组名称,10为数组大小。

那么,数组指针呢?

根据上面所说的,指针就是一块空间的首地址。所以,数组指针就是——数组的首地址。在c语言中,我们可以拿数组名表示数组的首地址。我们可以如下所示,将一个指针变量指向数组:

inta[10],*p;

p=a;

当然,由于数组的第一个元素是a[0],所以a[0]的地址也是数组的地址,所以,我们也可以这样写:

p=&a[0];

这样,我们就可以说,p是数组a的指针。

至于函数指针,就是指向函数的指针,因为在c语言中,函数实际是放在一段内存中的,所以只要我们找到了这段内存的起始地址,也就找到了函数,所以我们也可以拿一个指针变量,存放函数的首地址,从而让一个指针指向某个函数。

定义并使用一个函数指针的方法如下:

intfun(intx);/*声明一个函数*/

int(*f)(intx);/*定义一个函数指针*/

f=fun;/*将fun函数的首地址赋给指针f*/

或者使用下面的方法将函数地址赋给函数指针:

f=&fun;

赋值时函数fun不带括号,也不带参数,由于fun代表函数的首地址,因此经过赋值以后,指针f就指向函数fun(x)的代码的首地址。

这个时候f就成为了指向函数的指针。

我们就可以像下面这样,直接通过指针来调用函数了:

c=(*f)(a);/*通过指针f来调用函数fun*/

谢谢邀请,喜欢请关注我。

C语言数组下标和指针的关系

指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。1.指针与数组的关系当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如:charstr[20],*ptr;ptr=str;ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实现。如对数组元素的访问,既可以用下标变量访问,也可以用指针访问。2.指向数组元素的指针若有如下定义:inta[10],*pa;pa=a;则p=&a[0]是将数组第1个元素的地址赋给了指针变量p。实际上,C语言中数组名就是数组的首地址,所以第一个元素的地址可以用两种方法获得:p=&a[0]或p=a。这两种方法在形式上相像,其区别在于:pa是指针变量,a是数组名。值得注意的是:pa是一个可以变化的指针变量,而a是一个常数。因为数组一经被说明,数组的地址也就是固定的,因此a是不能变化的,不允许使用a++、++a或语句a+=10,而pa++、++pa、pa+=10则是正确的。由此可见,此时指针与数组融为一体。3.指针与一维数组理解指针与一维数组的关系,首先要了解在编译系统中,一维数组的存储组织形式和对数组元素的访问方法。一维数组是一个线形表,它被存放在一片连续的内存单元中。C语言对数组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。实际上编译系统将数组元素的形式a[i]转换成*(a+i),然后才进行运算。对于一般数组元素的形式:<数组名>[<下标表达式>],编译程序将其转换成:*(<数组名>+<下标表达式>),其中下标表达式为:下标表达式*扩大因子。整个式子计算结果是一个内存地址,最后的结果为:*<地址>=<地址所对应单元的地址的内容>。由此可见,C语言对数组的处理,实际上是转换成指针地址的运算。数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指针。4.指针与多维数组用指针变量可以指向一维数组,也可以指向多维数组。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。例如,在一个三维数组中,引用元素c[i][j][k]的地址计算最终将换成:*(*(*(c+i)+j)+k)。了解了多维数组的存储形式和访问多维数组元素的内部转换公式后,再看当一个指针变量指向多维数组及其元素的情况。1指向数组元素的指针变量若有如下说明:inta[3][4];int*p;p=a;p是指向整型变量的指针;p=a使p指向整型二维数组a的首地址。*(*(p+1)+2)表示取a[1][2]的内容;*p表示取a[0][1]的内容,因为p是指向整型变量的指针;p++表示p的内容加1,即p中存放的地址增加一个整型量的字节数2,从而使p指向下一个整型量a[0][1]。2指向由j个整数组成的一维数组的指针变量当指针变量p不是指向整型变量,而是指向一个包含j个元素的一维数组。如果p=a[0],则p++不是指向a[0][1],而是指向a[1]。这时p的增值以一维数组的长度为单位。5.指针与字符数组C语言中许多字符串操作都是由指向字符数组的指针及指针的运算来实现的。因为对于字符串来说,一般都是严格的顺序存取方式,使用指针可以打破这种存取方式,更为灵活地处理字符串。另外由于字符串以′\0′作为结束符,而′\0′的ASCII码是0,它正好是C语言的逻辑假值,所以可以直接用它作为判断字符串结束的条件,而不需要用字符串的长度来判断。C语言中类似的字符串处理函数都是用指针来完成,使程序运行速度更快、效率更高,而且更易于理解。

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

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

如要将二维数组赋给一指针,应这样赋值:inta[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];inta[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语言数组,当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。

ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实现。

数组指针和指针数组有什么区别

指针数组和数组指针的区别如下:

1.定义方式不同:指针数组是一个元素为指针类型的数组,而数组指针是一个指向数组的指针。

2.数据类型不同:指针数组中每个元素都是一个指针,而数组指针本身是一个指向特定类型数据的数组。

3.访问元素不同:在访问指针数组时,需要首先访问该元素所在的位置,然后使用间接引用操作符(*)来访问该元素所指向的值;在访问数组指针时,可以直接使用下标操作符[]访问其所指向的数组中的元素。

4.内存布局不同:对于指针数组,每个元素都是一个独立的内存位置,其值存储了相应对象或变量地址;而对于数组指针,它本身也是一个变量,并且存储了整个数组的地址

数组指针和指针数组有啥区别

指针数组和数组指针的区别如下:

1.定义方式不同:指针数组是一个元素为指针类型的数组,而数组指针是一个指向数组的指针。

2.数据类型不同:指针数组中每个元素都是一个指针,而数组指针本身是一个指向特定类型数据的数组。

3.访问元素不同:在访问指针数组时,需要首先访问该元素所在的位置,然后使用间接引用操作符(*)来访问该元素所指向的值;在访问数组指针时,可以直接使用下标操作符[]访问其所指向的数组中的元素。

4.内存布局不同:对于指针数组,每个元素都是一个独立的内存位置,其值存储了相应对象或变量地址;而对于数组指针,它本身也是一个变量,并且存储了整个数组的地址

文章到此结束,如果本次分享的指针数组和数组指针的定义和数组指针和指针数组有啥区别的问题解决了您的问题,那么我们由衷的感到高兴!

最新文章