#include <stdio.h>
int main (){
int x=10,*a=&x;
int *b=(int *)&a;
printf("%d %d %d %d %d %d ",x,a,*a,b,*b,**b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这个小程序变量x中赋值10,然后将地址x分配给指针变量a.现在正确的方法是int **b=&a因为b应该是一个指向指针的指针.但我认为这最终是存储的地址.所以要存储a一个int指针的地址b,我使用类型转换int *b=(int *)&a.现在a存储的地址b.所以,如果我使用*b,它给出相同的结果a.
但是,当我进一步扩展到**b 它时,它没有给出*a我预期的相同结果.实际上它会出错.*b并且a是相同的,所以,当我问到这样从值获取**b和*a这不起作用.为此,我认为一个概念,*b并a在值相同,但他们在不同的类型.由a指针和值给出的值*b是一个整数,所以**b不可能像*a.
但我仍然认为它应该有效.
我使用的是Dev C++ 4.9.9.2,它是一个32位编译器.分配给int和的内存int *是相同的,即4个字节.并且*b也a具有相同的位表示.所以当我写作时,*(*b)我使用了相同的值*(a).但是什么是预防因素?的格式是这样*(some bit representation),并且位表示是的情况下,相同的*b和a.所以x应该检索价值.请解释预防因素.
一旦你的变量声明被清理了一下,它似乎对我很好:
int main (){
int x = 10;
int* a = &x;
int** b = &a;
printf("%d %d %d %d %d %d ",x,a,*a,b,*b,**b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我建议问题是你b用错误的类型声明(然后&a转换为该类型).它不是int*,它是int**一个指向整数的指针.您当然可以*b在printf()语句中转换为所需类型,但为什么不首先正确声明它?
这是一个想法的例子:http://ideone.com/idwfd
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |