C语言 int *p=&x; printf ("%p",p); printf ("%p",*p); 两个输出结果为什么不同,输出p和*p分别代表什么

小白一个 希望高手指教!

p是指针,记录存数据内存的地址,*p是内存中的数据
例如仓库,p是仓库的编号,*p是仓库里的货物
指针也是需要存起来的,例如仓库编号也要写在牌子上啊追问

是不是P就是所指向变量x的地址,*p就是变量x所被赋予的值的地址?

追答

还是仓库的例子
p是“33号”
*p是“33号”仓库里的内容
打印时候p打印是33号,*p打印33号仓库里的内容

追问

再问一个问题,求大哥别打我!

【问题1】 有以下代码
int*p;
p=&x;
int t=*p;
那就说明 *p是int 型的;
问:那么为什么,以下写法不对?
int *p;
*p=32;
(问题2) int x=32;
int *p;
*p=&x;
printf ("%d",p);
请问输出的这个奇怪的值代表什么?

追答

问题1
*p=32不对 int *p只是给你一个仓库编号牌子,没给你仓库,你能存东西吗?不能。
p = &x 将x的地址给p x是一个仓库,把p这个牌子贴在x仓库上,这样就能存东西了
问题2
printf("%d", p),打印p,仓库牌子的编号(地址)而*p是仓库中的内容

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-11
输出p就是指针变量的地址
输出*p是先取指针p所指向的内容即为变量x,最后输出的是变量x的地址追问

如果*p是x的地址,那么printf ("%p",*p);的输出值就应该等于 printf(“%p",&x);可是我试了一下,不相等啊

追答

我重新思考了一下

%p应该是输出指针地址的值

就像图中的int x = 10; int *p = &x;

以上表明我们定义了个指针变量p并把x的地址赋给了p

对指针p:

当我们只输出p的%p时,即把指针p的内存地址里的值输出即为x的变量的地址

当我们只输出*p的%p时,即先取p内存地址中的值,再把这个值当作指针指向一个新的内存单元然后输出这个单元的值,即为x变量的值10,十六进制为a

对于变量x:

当我们只输出x的%p时,既把x地址中的的值输出,即和*p输出%p时的值一样

当我们只输出&x的%p时,既把x的地址输出,与p输出%p一样

知识有限,如果有错还望指出

本回答被网友采纳