int *p=10; printf("%d",p); 为什么最后输出是10,不应该输出地址吗?

有没有人在啊,想请问下,int *p=10; printf("%d",p); 为什么最后输出是10,不应该输出地址吗?
最新回答
是该放手了

2025-06-20 19:22:16

首先说下结果,你最后输出的10就是地址。
解释:
int *p=10;
这一行代码的意思是声明一个int类型指针,该指针指向的内存地址就是10。当然这个地址肯定是个非法地址,如果后面试图访问这个指针的内容程序就会异常。
补充:如果你想定义一个int类型指针,给该指针分配内存并且初始化数值为10。
1)在c++中可以这么写:
int* p = new int(10);
2)如果是纯C的,就要分两行
int* p = (int*)malloc(sizeof(int));
*p = 10;
3)或者定义的指针指向其他变量
int a;
int* p = &a;
*p=10;
总之,定义一个指针,要想使用,就得给他分一块内存,要么直接向系统申请,要么指向其他变量。
旧人旧城旧余温—

2025-06-20 21:31:00

int *p=10; printf("%d",p); 为什么最后输出是10,这是因为你写错了。应该写成:
printf("%d",*p);
或者是
int a,*p=&a;*p=10; printf("%d %p",*p,p);
追问
必须借助其他才行吗,为什么要这样啊,不是很懂指针,有点迷糊
追答
指针必须要指向可使用的内存单元才可以存储数据的。
象这样直接定义指针并赋值,int *p=10;是不行的,不能通过编译的。
追问
非常感谢您的指点,不过因为下一个回答说得更全,我就把最佳先给他了,望理解(鞠躬)