1. 首页 > 智能数码 >

数组指针和指针数组的区别(数组指针和指针数组的区别和用法)

关于指针、数组的理解

在C/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。

你也不用绕了,这个也不是很难理解

数组指针和指针数组的区别(数组指针和指针数组的区别和用法)数组指针和指针数组的区别(数组指针和指针数组的区别和用法)


数组指针和指针数组的区别(数组指针和指针数组的区别和用法)


你说的应该是二维数组吧,这个可以理解为二层指针

如a[2][3]={1,2,3,4,5,6}

a,a[0],这个虽然地址是相同的,但是意义是不同的,a是整个二维数组的首地址,是两层的指针。但a[0]不是整个数组的首地址,而是a[0]={1,2,3}这个小数组的首地址,因为a[0]还是一个数组

这里就是所谓的二层指针了,所以(a+i)还是一个指针,表示第i行所有的元素的首地址

所以可以用地址来表示这个数组,可以看成是一维数组,只要地址和下标对应好就可以

如a[2][3]={1,2,3,4,5,6}完全可以用a[5]来表示a[2][2]这个数

你被绕晕啦。

p是一个指针,普通指针:char a; //可以用a++, an =a[0];=b; 看情况可以用 a='c';所以p+2也是指针。

所以

(p+2) + 3 是 a[2] + 3

p + 3 是 a[0] + 3

p +2 + 3 是 a[0] + 2 + 3

b = a[2] + 3,下表引用 [] 和间接访问 是同一个意思,a是一个指针常量,相当于 (a + 2),所以结果是一个数。

记住一点,数据在内存里面的存放,每个内存单元都有一个地址,就像我们住的宿舍,每个房间都有门牌号,指针P指的是门牌号,P则是这个门牌号的房间里放的东西。。。所以

a[2]也是指的房间里面的东西。。。所以b是个数

1.数值

2.数值

3. p+2 指向的地址 , 所包含的数值 +3 ; p所指向的地址, 所包含的数值+2 再+3 , 前者2加在 地址本身上, 后者加在 地址所包含的数值上.

4. a[2] 也可理解为 (a+2)

5. 数组一旦加[] 索引, 就代表指向的元素数值了, 只有单独使用数组名时,才代表指针 , a[2] 代表数组a中第3个元素数值, 这个数值+3, 赋值给b.

书上说(p+2)+3是a数组2行3列元素的地址

((p+2)+3)才是值

(p+2)+3是地址?

(p+2)是地址,(p+2)是值,值+值=

p+3是?

p是地址,p 是值,值+值=

(p+2)+3与p+2+3的区别?

(p+2)+3为(p+2)地址中的值+3,p+2+3为p地址中的值+5

为什么(p+2)+3就是a[2]+3,

若p=a,则p=a[0],(p+2)=a[2];

如果b=a[2]+3,为什么b又是个数?

留点给你自己想

数组和指针的区别

int find_max(int a[][100]) // 只有在形参里这样写才是数组的指针,这里是宽度为100的数组的指针

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

数组名的值是数组的首地址。指针变量名是一种变量,可以给其赋地址的值。

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

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

设存在数组a[10],

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

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

#include

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));

}

指向数组的指针和指向数组的元素的指针有何区别?数组名和指针变量名有何区别?

p = a;

指向数组的指针是数组的首地址

指向数组元素的指针是指向指针数组:就是一个由指针组成的数组,那个数组的各个元素都是指针,指向某个内存地址。char p[10];//p是一个指针数组该元素的地址

数组名是定义数组时给数组的名

=1,指针变量名是该指针的名

例如:

int p;

p=a;

q=&a[1];

a是数组名,p、q都是指针变量

而p是指向数组的指针

q是指向数组元素的指针

c语言中,指针数组和行指针的区别是什么?

其实a本身就能当成指针使用了。不用引进指针也可以。但是为了定义明显所以一般会再引进一个指针。

int(p)[4],这区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。而且数组在定义之初就已经有了自己的内存,一般的指针如果未指向某一个内存块时,它是没有自己的内存的,即所谓的野指针。个就是行指针

这种类型的指针p是指向一个一维数组,这个一维数组包含4个整形元素

但是 int a[4];p=a; 这种方式却是不对的

因为p只能指向一个整型的一维数组,不能指向一个整型数据,a所指向的正是a[0],是个整型数;

实际上int(p)[4]这种类型的指针是用于数组中的,比如定义一个二维数组int b[3][4],就可以这样赋值p=&b[0],使p指向一维数组b[0],而且p的增减是以一维数组的长度为单位的,比如p+1指向的就是b[1]了

int p[4]这个是指针数组了,首先弄明白这个是数组,里面存放的是指针也就是地址,这个地址所指向的是一个整型数经验之谈,楼楼加分啊据,你可以把p[0],p[1]....当作一个个的指针变量来使用

我学的时候也弄了半天才搞明白,这是我总结的,你多看看指针那关于数组与指针的一节,做些练习自己验证几次就容易弄明白了

字符串指针和字符数组有什么区别?

a[n]是指第n+1个指针是c语言精华,重要的部分字母 ; a是其虚拟地址上的字

字符串指针和字符数组有很大的区别。

而字符数组则是一个固定大小的数组,在编译时就已经分配了内存空间。它包含一系列的字符,可以通过下标来访问每一个1.指针:存放变量的地址的变量;字符。

还有字符串常量,是存储在常量区中的只读的字符串。

通常情况下用字符指针更加灵活,因为他可以动态分配内存,可以随时重新分配内存大小。而字符数组一般用于局部变量等数组大小确定的场合.

指针、数组名、引用三者的相同点与区别?

=2,

上面一些说的太多,但重点没说;

但是在指针外面加上 () 就是间接访问,结果就是指针指向的内存单元

2. 数组名: 是一个常量类型的指针,这是与“指针”变量的主要区别;

!!!!!!!!!!!!!!!!

楼主连贴也不看了、也a;不结了,太忙了吧

请问二级指针,二维数组,数组指针的区别

二级指针:指向指针的指针,它存放的是一级指针的地址。

int p;

int q;

q = &p; //把一级指针p的地址赋值给二级指针q。

二维数组:

int arr[4][5]; //定义了一个4行5列的数组

数组指p=针:指向数组的指针。

int arr[4][5];

int (p)[5]; //指针p是指向数组的指针,你可以理解为指针p是二维数组的行指针。

p=ar指针数组:a+1 = 0x10004 = (int)&a + sizeof(int组只是定义在栈区的一个连续变量,它的首地址就是一个指针。)r;

还有一种就是指针数组,即数组元素都是指针变量

int p[5];

int q;

q=p; //二级指针q指向了指针数组p的首元素,它的首元素是指针p[0]。

行指针和指针数组到底有什么区别!!!高手请指教.

一维数组的数组名就是其首地址。

行指针:

int q;数组指针:

p[0]

=a[0];

p[1]

=a[1];

你的叫法跟我有些异,我弄了半天.....

行指针是一个指向数组的指针,而数组除此之外,指针就是指针,数组就是数组,一点也不一样,例如指针是一个元素为指针的数组.

C语言中一维数组和指针有什么区别?

指针都没初始化,运行个毛啊。

...应该这...样:

数组直接保存数据,指针保存的是指向数据的(p+2)+3,说得是P这个门牌号加2号的房间里面的东西,再加3.。。地址,数组是一组数据的,就把数组比喻成一座房子,这座房子里有许多小房间,依次从0开始编号,每个小房间可以保存一个数据,而指针就相当于你保存了其中一个小房间的地址,望采纳

声明了一个指针后,要给这个指针分配一个内存空间。

b = (char )malloc(长度 sizeof(char));//你可以理解为这样声明char b[长度];

char b,声明后,内存为指针b开辟了一个存储空间,大小根据编译器决定,这个存储空间能存储一个32/64位的地址。而这个存储空间有可能刚刚被别的程序使用,而里面存有一个未知的值。所以如果不声明b所指向的地址的就使用指针的话,很有可能会访问到一块未知的空间而导致程序崩溃。分配完空间即可使用。对于char 指针,代表着b每次存储的内容的长度只能是char的数据类型长度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息