你好,还想请教你点问题。

在我提问之前用int跟struct类型尝试,自定义函数中动态内存分配内存过程中,与函数间地址传递的练习中,发现一些问题不太明白,在用int传递指针,在自定义函数中用二级指... 在我提问之前用int跟struct类型尝试,自定义函数中动态内存分配内存过程中,与函数间地址传递的练习中,发现一些问题不太明白,在用int传递指针,在自定义函数中用二级指针的形参接收地址,在函数内可以用**pp = 450;成功赋值,并可以返回到主函数中打印。在用struct 传递指针到自定义函数中,用二级指针形参接收,在函数内(*pp)->num = 500;成功赋值并打印。但是,为什么在int中用(*p)=450 却出错,在struct 中以**pp->num = 500;也出错。指针到是明白地址与地址间改变地址内的值的原理,可到二级指针赋值的时候让人摸不着头脑。 展开
 我来答
风若远去何人留
2018-03-16 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
类型问题。
第一个。 pp是int **型, *pp就是int*型,这是一个指针, 是不允许直接赋值常量的。 如果要赋值,可以 *pp=(int *)50. 不过这个是危险的, 因为等效于在主函数中 p=(int*)50. 很明显, 50不是一个合法地址, 这样赋值后, 一旦后续有printf("%d\n",*p);这样的取值操作,就会因为非法地址访问导致程序崩溃。
第二个类似。 pp是二级指针 而->的优先级高于*
这样 写成 **p->num其实是**(p->num)而作为二级指针的p, 是没有num这个元素的。 所以会提示num找不到。 要用这种形式访问, 可以写成
(**p).num
注意是点, 因为**p已经不是指针而是结构体类型了。
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式