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

作者&投稿:赫空 (若有异议请与网页底部的电邮联系)

数组是以某种类型为单位的连续的一段内存空间作为存储区域,其中存储相应的数据。其变量名代表数组起始空间地址,也就是首元素的地址。

指针是的本质是内存中某一字节的地址,其存储在变量名所对应的内存空间中。


之所以说数组的本质是指针,是因为在在具体实现上,数组是基于指针实现的,编译器只提供了数组首元素的地址,因此在访问时需要使用首地址+偏移量的形式,所谓的偏移量由下标决定。这样一来情况就变成了这样:

假设存在数组a[10],

当我们访问第一个元素是可以使用a[0],也可以使用*a,或者*(a+0),

当我们访问第二个元素时可以使用a[1],同样的,指针表示为*(a+1),


你可以看这段代码理解一下

#include<stdio.h>
int main(void)
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
printf("%d %d %d
",a[0],*a,*(a+0));
printf("%d %d
",a[1],*(a+1));
}


说说数组和指针的区别~

1,指针变量用于保存数据的地址,数组用于直接保存数据(当然你可能见过,数组的每个元素是指针,不过,一组指针也是数据,它们各自的内容才是地址)2,访问方式:指针是间接访问,首先取得指针的内容作为地址,再去该地址访问数据;数组是直接访问,数组名即是地址3,指针通常用于动态数据;数组通常用于固定数目和类型的一组数据4,定义指针变量并不会带来内存分配,要自行分配内存并且将指针变量的内容改写为分配好的地址,通常用内存分配函数如malloc达到;定义数组会隐式分配内存5,对sizeof操作符的返回值影响,sizeof(指针)永远会返回平台指针大小,通常32位机返回4,64位返回8.而sizeof(数组名),则会返回数组的内存大小,这取决于数组包含多少个数据。当然,在某些情况下,是可以混用的,比如作为函数的形参,无论你写成char s[]还是char *s,都没有区别,在函数内对这两种传来的实参作sizeof,也都只能是得到指针大小,并不会因为你写char s[],而返回数组的大小。例如:void fun(char s[])//和void fun(char *s)等同{ printf("%d
", sizeof(s));//输出4或者8,看平台和操作系统是32还是64}调用:main(){ char s[6] = {'h', 'e', 'l', 'l', 'o', '\0'}; fun(s);}

int a[3][4]这个无需多说,就是一个二维数组。
int (*p)[4]就相当于int p[][4],它就是一个二维数组的指针,可以指向一个第二维度为4的二维数组。而a就是这样的数组,因而下面是合法的。
p=a;
int *p[3]是指针数组。说白了,就是定义了三个指针,分别为p[0],p[1],p[2]。可以将他们单独拿来使用。
int a1,a2,a3;
p[0]=&a1;
p[1]=&a2;
p[2]=&a3;

数组指针和指针数组的区别
答:数组指针数组名本身就是一个指针,指向数组的首地址。注意这是声明定长数组时,其数组名指向的数组首地址是常量。而声明数组并使某个指针指向其值指向某个数组的地址(不一定是首地址),指针取值可以改变。指针数组主要用来指向若干字符串,使字符串的处理更加灵活。同时,我们应该清楚知道,字符串本身就是一个一维...

指针数组和数组指针的区别有哪些?
答:指针数组:表示的是一个数组,数组中每一个变量都是指针型变量。数组指针:表示的是一个指针类型的变量,这个指针变量指向的是一个数组。

数组指针和指针数组有什么区别( )。
答:【答案】:A、C 数组指针只是一个指针变量,它占有内存中一个指针的存储空间,而指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

数组指针和指针数组的区别
答:int a[4][5]={{1,2,3,4,5},{6,7,8,9,10}} (*p)[5]=a;则*(*(p+1)+1)代表第二行的第二个元素7。指针数组是由若干指针组成的数组,它是一组指针,而不是一个指针。它和普通的数组一模一样,只是它存放的是指针,也就是地址,而不是元素的值。如:int a=2,b=3,c=5;int...

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

C语言中:数组指针与指针数组有什么区别?
答:数组指针是指向这个数组首地址的指针,指向对象是这个数组;指针数组是存放一类指针的数组,这个数组的每个元素都是一个指针;例子:int a[10];int* s;s = a;//这里s就是一个数组指针,它的值就是数组a 的首地址;当然,如果a是一个整数,那s就是一个指向整型的指针;int a;int* s[5];for...

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

指针数组的数组名表示什么?
答:指针数组的数组名就是该指针数组首元素的地址的别名。比如,一个人可以叫王小二,也有叫它小二,或者小王,其实都是指同一个人。指针数组就比如这个例子:int *p[10] 那么p等价于&p[0]因为指针里面存储的是地址(十六进制数),所以&p[0]这里面存放着一个int变量的地址。是不是觉得用地址来存放...

指针数组和数组指针的区别?
答:首先我们要知道指针与数据的关系;指针实际上是一个双字的数据,也就说它也是一个数。打比方来说:一个城市(内存)都是小房子(内存单元),每个房子都有门牌号(内存单元的地址)。快递员送货时按照门牌号给大家送货(数据)。如果你到亲戚家去了,货物要送到你手上,你必须在你家的房子上留一张...

指针数组和指针是一样的吗?
答:正确的。数组指针是指向数组地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int *p[4],定义了p[0],p[1],p[2],p[3]三个指针),其本质为数组。数组指针的使用在某些情况下与指针数组很相似,要注意区别。p是一个指针变量,它指向包含4个int元素的一维数组,此时p的增量以它...