首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这3行代码是正确的?大约*p

为什么这3行代码是正确的?大约*p
EN

Stack Overflow用户
提问于 2013-09-23 17:17:34
回答 5查看 120关注 0票数 2
代码语言:javascript
复制
int *p;
scanf("%d",&p);
printf("%d\n",p);

在我过去的理解中,"p“是一个地址,但现在看来p是一个简单的变量。

我不明白为什么这3行代码是正确的!

你能帮帮我吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-23 17:20:52

他们是不对的。它们似乎是工作的,因为您要求scanf存储一个整数,存储它的地址是指针 p地址。基本上,您将指针本身的存储视为整数的存储。同样,对于printf,您传递指针的地址(其中包含整数),并要求printf将其读取为.一个整数。您甚至可以将第一行更改为

代码语言:javascript
复制
float* p;

而且它似乎仍然有效。最后,这是一个很好的例子,说明了为什么您应该避免类型不安全的C风格接口。

票数 3
EN

Stack Overflow用户

发布于 2013-09-23 17:25:17

这只有在指针与整数大小相同的情况下才能工作,因为基本上是将指针视为整数。也就是说,如果int是32位整数,指针void*是32位地址.

它的写法是:

代码语言:javascript
复制
int p; // not the lack of the *
scanf("%d",&p); // this gives scanf the address of p
printf("%d\n",p); // this uses p's value

它将实际使用p作为整数,而不是将其声明为指针并将其视为整数。

票数 4
EN

Stack Overflow用户

发布于 2013-09-23 17:22:48

如果我能通过你的陈述来解释,那就是

代码语言:javascript
复制
int *p; //Declaration of pointer variable p, which can hold the address of integer variable
scanf("%d",&p); //Getting input, will be stored at address of pointer variable p
printf("%d\n",p); //It will display the value stored at &p
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18965140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档