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, 但是不能说其他的赋值是错误的,只是对这个题来说没什么意义而已。