作业帮 > 综合 > 作业

指向指针的指针 假设 int **p;int i = 3;*p = &i;在这种情况下是不是p指向*p*P指向**p而*

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/19 04:26:48
指向指针的指针
假设
int **p;
int i = 3;
*p = &i;
在这种情况下是不是
p指向*p
*P指向**p
而**p就是要存储的内容
我这样理解对吗?
求教各位大哥大姐
你的理解基本正确,小问题是 你的*p没有分配空间,所以直接用*p可能会造成内存出错
再问: *p给他赋值 为 &i了 怎么说没有分配空间呢
再答: 那你先告诉我,&i 这个东西存放在哪里
再问: 刚才我问错了 &i这个东西放在了 *p这个内存的单元里面了 我现在理解你刚才说的意思了 你的意思是 *p这个内存单元的地址 没有事先分配好吧
再答: 嗯,对,因为你题中只分配了两个内存单元,一个是I的内存单元,一个是P的内存单元,那*P的内存单元是没有分配的,既然是指向指针的指针,那么,指针的指针要占一个单元,指针也要占一个单元,指针指向的地址也要占一个单元
再问: 大哥很感谢您的帮助不过现在我晕了 在c语言中 是不是声明一个变量的时候 就给这个变量分配内存呢? 如果是的话 在这个例子中 我在声明 int **p;的时候 系统就给p分配好了内存地址 所以 p这个单元所占的内存地址是安全的 而我没有声明 *p 所以系统给*p分配内存的时候 就是未知的了 是这个样子吗? 如果先给 p赋值的话 给p赋的值 不就是 *p这个指针变量在内存中的地址了吗? 怎么正确给p赋值呢?
再答: p已经是有地方存放了 对吧,但是p没有值 你要么再定义一个指针变量,如 int *tmp = &i; p = &tmp; 或者 给p分配一块指向的空间 p = (int**)malloc(sizeof(int**));//这样*p就有空间了 这两种都可以,不过后一种要记得自己free掉p哦