*P=&a[0] 和P=&a[0]有什么区别
C语言里指针变量那块,我看到这个不太明白,它有个粒子是int*p=&a[0];相当于int*p;p=&a[0];然后它特别强调是p=&[0]而不是*p=&a[0],我不太...
C语言里指针变量那块,我看到这个不太明白,它有个粒子是
int *p=&a[0];相当于int *p;p=&a[0];然后它特别强调是p=&[0]而不是*p=&a[0],我不太明白,她第一步是将指针变量P定义为整型变量,那第二步两个有什么区别呢??谢谢 展开
int *p=&a[0];相当于int *p;p=&a[0];然后它特别强调是p=&[0]而不是*p=&a[0],我不太明白,她第一步是将指针变量P定义为整型变量,那第二步两个有什么区别呢??谢谢 展开
2个回答
推荐于2017-10-29
展开全部
举个例子吧:
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内存区通常是不可写的,这样就会报错。
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内存区通常是不可写的,这样就会报错。
2017-10-27
展开全部
*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句则有可能引发内存非法访问错误。
p=&a[0] //将 a[0]的地址赋给p
则,如果:
int a[10];
int *p;
*p=a[0]; //1
p=&a[0]; //2
2句恒正确,1句则有可能引发内存非法访问错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询