假设有定义int p那么p 0p分别代表什么

2020-11-22 13:49:16 字数 4441 阅读 1740

1楼:

p[0]就是*p 就是p所指向的内存中的值&p是p这个指针本身的地址,&p的类型是int**&p[0]就是p[0]的地址,也就是p

(&p)[0],就是*(&p),也是p

*p,就是前面说的p[0]

比如定义了指针int *p,x; p=&x; 那p,*p,&p,*&p各代表的是什么

2楼:匿名用户

p是指向int 类型数据的指针,&p是指针p的地址,也就是指向指针的指针,*&p是指针的指针指向的数值.

*p=&a[0] 和p=&a[0]有什么区别

3楼:匿名用户

举个例子吧:

a是一个数组,它在内存中的初始地址比如说是0x11111111(简单假设),且a[0]的值是1,也就是说,内存0x11111111中存储的值是1。

于是,&a[0]=0x11111111,a[0]=1。

int *p;

p=&a[0];

指针p会有一个自己的内存地址,通常占用4个字节(比如初始地址是0x22222222)。p的值是&a[0],也就是说从0x22222222开始,后面4个字节中存储的值是0x11111111。

*p的值就等于p所指向的内存地址中存储的值,也就是a[0]。所以*p等于1。

如果*p=&a[0]的话,很容易出问题。比如说int *p之后,p的初始值可能是0xcccccccc(debug版本)或者0x00000000(release版本)。这个时候,如果你写一句*p=&a[0]的话,将会把0xcccccccc或者0x00000000内存之后4个字节的值变为0x11111111。

而0xcccccccc和0x00000000内存区通常是不可写的,这样就会报错。

4楼:匿名用户

*p=a[0] //将 a[0]的值赋给到p所指向的位置。

p=&a[0] //将 a[0]的地址赋给p则,如果:

int a[10];

int *p;

*p=a[0]; //1

p=&a[0]; //2

2句恒正确,1句则有可能引发内存非法访问错误。

若有定义语句int a[2][3],*p[3]那么为什么p[0]=a;语句不对?

5楼:

看*p[3]这部分,由于右结合性,所以p首先是一个数组,然后它才是一个指针,所以他是3个指针,而不是“指向带有三个元素的数组”的指针。

所以p[0]=a;是错误的

应该这样写:

int a[2][3],(*p)[3];

p=a;

这样是正确的

6楼:匿名用户

int a[2][3]是二维数组

int *p[3]是一维

指针数组,意思是由3个一维指针组成的数组,其中p[0],p[1],p[2]是3个一维指针

所以就很明显了,a是二维的,p[0]是一维的,不可以赋值如果是二维指针,如:int **p; 那么p=a;就是正确的

7楼:匿名用户

p[0]=a??这怎么看都是错误的!!

指针是比较难理解的。

你要分清 指针和数组的关系, 指针数组的概念。

int a[2][3]=;

如果你定义 int *p 怎样使用p访问此多维数组的值呢?

这种情况 p的初始化是:p =a[0];

访问数组的得**是:

int *p;

for(p =a[0];p错误,a是一个整型地址p = &b //错误,&b是一个 int[4]的地址p = &a //正确

所以用 int (*p)访问一位维数组的**如下:

int a[3] =;

int (*p)[3];

p = &a;

int i;

for(i=0;i<3;i++)

cout<<*((*p)+i)<

(6) 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是

8楼:匿名用户

选d.a.p是一个指针,不能给它赋一个整型的值1b.

*q仍然是一个指针,*q就是p.所以也不能给它赋一个整型的值.c.

q=p;q是个二级指针,p是一级指针,不能把一级指针赋给二级指针.*p=5,即给n赋值为5,正确.

9楼:匿名用户

d p是指针q是指向批针的指针,记录的是地址多翻下书这不太好理解

10楼:匿名用户

我打假 来了 如上,*q是指针,那么p就存的是他的地址,就是n 的内存中的位置,表示为&n而**p = &q,说明**p是个指向*p的指针 即是**p的值为n,而*p里面装的呢是p,即是&n,n的内存单元**p 里面装的是*p的内存单元,在这儿**p 和*p 和q 里面都装的是内存,是数据在机器里面的地址,对于这种我们不能够用这种直接赋值的方式改变它 故而我们看a,b,c 都是这样 所以abc错误,他们都在改人家内存

int *p; p = null是否等于p[0] = '\0';

11楼:匿名用户

不是一样的, 前者是正确的, 表示p不指向任何地址

p[0[ 不能这样用,你是往p[0]这个内存中写入字符'\0'

由于p还没有申请内存,所以这样操作它是错误的

12楼:匿名用户

不等,int *p,其中p表示的是指向int类型的指针,p[0]表示的是指针p所指向的内存单元的值,打个比喻,int *p中的p有点类似于a[0]中0的角色,而不是a[0]的角色

13楼:

p是一个int指针,其实是一个int类型变量,p[0] = '\0'你是指的p为char*型,所以不等于。

若定义int i,*p;是p指向i的赋值语句是().a,p=&i b,*p=&i c,*p=i d,int (*p)[4]

14楼:

a.p=&i;正确。

15楼:匿名用户

买什么个人中心手机知道

#芝麻开门#若定义int i,

若有int a[2][3],*p[3];则为何赋值语句p[0]=a;不对呢?谢谢啦

16楼:匿名用户

int* p[3];

p是指针数组,即p中全是指向int的指针(注意是指向int的)。

我写了个程序(错误的程序)测试了下:

#include

int main()

;int *p[3];

p[0] = &i; //1

p[1] = a; //2

}1处可以的,2处就有问题,编译器(vs 2010)提示"error: a value of type "int(*)[3]" cannot be assigned to an entity of type "int*".

意思是说p[1]是指向int的指针,而不是指向指针数组(int(*)[3])的指针。

关于指针数组和数组指针,lz可以自己去查阅更多详细资料。

17楼:匿名用户

这里p[0]是一个指针,指针是不能直接用数组赋值的。

main()

;int *p[3];

p[0]=a[0];

p[1]=a[1];

p[2]=a[2];

for(i=0;i<2;i++)

}getch();}

18楼:北纬践行者

int *p[3],这定义的是一个整型的指针数组,a是二维数组的首地址,a[0]是行地址,你可以赋值p[0]=a[0],p[0]=&a[0][0],但就是不能让p[0]=a,这是两个不同类别的地址,只有当你定义int (*p)[3]的时候,p=a才是合法的。

7. 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是( )。 a) p=1; b) *q=2; c) q=p; d) *p

19楼:匿名用户

n是整数,p是整数指针,q是双重指针。

a:p=1 属于将地址1赋给p,非法。

b:*q=2 这里*q相当于一个整数指针,问题同上,非法。

c:q=p 相当于把p的地址赋给q,不能说错,但是不同维数的指针互相赋值,容易出错。

以上三种都是编译没有问题。

d比较符合规范而已。

20楼:匿名用户

这题出的是有点问题,按他这意思,q应该是一个指向指针的指针,所以正确答案应该是d,

但是不能说其他的赋值是错误的,只是对这个题来说没什么意义而已。