以下哪个选项中的p不是指针运算* p=& a正确吗?


我觉得一样,可是前者访问*P就相当于a,但却是a的地址,这不是矛盾吗?找人解答,并耐心讲解下指针方面的知识,就是指针的应用方面,举例几个程序可以吧?嘿嘿...
我觉得一样,可是前者访问*P就相当于a,但却是a的地址,这不是矛盾吗?找人解答,并耐心讲解下指针方面的知识,就是指针的应用方面,举例几个程序可以吧?嘿嘿
展开
选择擅长的领域继续答题?
{@each tagList as item}
${item.tagName}
{@/each}
手机回答更方便,互动更有趣,下载APP
提交成功是否继续回答问题?
手机回答更方便,互动更有趣,下载APP
展开全部你说“可是前者访问*P就相当于a,但却是a的地址,这不是矛盾吗?”,是因为你不明白*p的多义性,举两个例子你就知道了:int
*p;这是定义一个指针变量,应该把他看作(int *)p;其中(int *)跟int一样,也看作是一种类型:指向实型数的指针型。而对于
int *p=&a;int b;*p=b;在这里,*p相当于(*p),“ * ”是取内容运算符。好好看书吧,这都是书上的细节部分,要想学得好,要靠记得牢。已赞过已踩过你对这个回答的评价是?评论
收起展开全部
都是定义了一个指针变量,然后把a的地址复制给这个指针变量,效果基本是一样的。稍微的区别是,一个是直接赋值,一个是先定义,后赋值。区别在于,第二种先定义,后赋值的情况,如果定义与赋值间还有其他代码,那么P指向的地址是未知的,所以使用的话会有未知行为。如果定义与赋值是连续的语句,那么上述两个内容就完全一样了。
展开全部

问题补充:还有 定义一个指针要确定它指向数据的类型 比如 int *P ;p指向的数据类型只能是int型; 那是为什么呢? 因为程序运行执行某种操作的时候需要知道指针的类型比如 int a[10];int *p = a;现在p指向数组的首地址 假设这个地址是0x00000000那么*p = a[0]那么怎么指向a[1]呢?执行p = p+1后 *p=a[1]了请注意 p=p+1不是 0x00000000+1而是0x00000000+4(在32位的机器上)为什么是加4而不是加1 因为int型在32位机器上是占四个字节 所以指向下一个数组元素的地址就需要把地址移动四个字节这就是指针需要类型的原因 如果指针是 char类型 那么p=p+1地址就移动一个字节 我的表达能力不太好 不知道你能不能明白二 int a; char *p; a=4;/*输出的值是否相等取决于此处的赋值范围*/ p=&a; printf("%d\n",a); printf("%d\n",*p); 如果a在-128~128间输出都是相等的 超出范围后就不一样了. 这个就像我上面说的 如果是char型 那么printf函数从指针开始读取1个字节输出,如果是int型 那么printf函数从指针开始读取四个字节a = 4 在内存中存储的为 0x04 0x00 0x00 0x00
(intel的CPU应该是这样存储的 不同的cpu是不一样的好像 地址依次增加)所以当当a在-128~128时 printf("%d\n",a); printf("%d\n",*p); 都输出0x04 (从指针开始读取一个字节和4个字节是一样的)如果a大于128
比如在内存中存储的为 0x04 0xFF 0x00 0x00 这样printf("%d\n",*p); 就只读取了 0x04 ,0xFF被抛弃了 所以就不一样了 好像是这个样子的三指针只存放一个地址而已,难道不同数据类型的地址长度什么的都不一样吗? 地址长度是一样的 sizeof(int *) 和 sizeof(char*)在32位机器都是4个字节以上是我的回答 如果有什么不正确的地方 还请指出 谢谢
展开全部效果一样。展开全部一样。
收起
1条折叠回答
收起
更多回答(3)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
为你推荐:
下载百度知道APP,抢鲜体验使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。扫描二维码下载
×个人、企业类侵权投诉
违法有害信息,请在下方选择后提交
类别色情低俗
涉嫌违法犯罪
时政信息不实
垃圾广告
低质灌水
我们会通过消息、邮箱等方式尽快将举报结果通知您。说明
做任务开宝箱累计完成0
个任务
10任务
50任务
100任务
200任务
任务列表加载中...
}

我要回帖

更多关于 以下哪个选项中的p不是指针 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信