问一道c语言题

来源:百度知道 编辑:UC知道 时间:2024/04/30 02:34:54
#include "stdio.h"
int main()
{
int a;
int *p;

p = &a;
*p = 0x500;
a = (int )(*(&p));
a = (int )(&(*p));
if(a == (int)p)
printf("equal !\n");
else
printf("not equal !\n");
}
请问本程序的输出显示是什么?
答案:输出显示为”equal!”

请问其中的a = (int )(*(&p));与a = (int )(&(*p));具体表示什么?

a = (int )(*(&p));表示先取指针p的地址在取其内容,然后强制类型转换为int类型.
a = (int )(&(*p));表示先取p指针的内容在取其地址,然后强制类型转换为int类型.

都一个意思,)(*(&p)),(&(*p))这2个结果就是指针p,这道题可能就是考验你指针的学习.

其实a = (int )(*(&p));与a = (int )(&(*p));都是一样的意思.
*(&p)就是取指向指针变量p的地址所指向的值,也就等于p,即&a或者说是a的地址.
&(*p)就是取指针p所指向的地址的值的地址,即a的地址.
a = (int )(*(&p));与a = (int )(&(*p));都是把a的地址赋值给了a.所以a和p的值的大小是相等的.

a = (int )(*(&p));
&p 指针p的地址
*(&p) 指针p的地址的取值,即指针p的值(a的地址)

a = (int )(&(*p));
*p 指针p的取值,即a
&(*p) 指针P的取值的地址,即a的地址

程序分析:

#include <stdio.h> //尽量使用尖括号包含文件
void main() //如果没有返回值,又是C语言风格,建议main函数无返回值
{
int a; //定义变量a,没有初始化
int *p; //定义指向整型的指针变量,没有初始化
p = &a; //让p指向a变量的地址,此时如果对p解除引用,将取得a的值
*p = 0x500; //把p解除引用(实际上就是在更改a的值),将那块空间的值赋为500(这是16进制数,换算为10进制是1280)
//进行到这个时候,p=&a,a=500
a = (int )(*(&p)); //把p这个变量的地址取出来,解除引用,实际上就是取了p保存的地址(也就是a变量的地址),强制转换为整型,再赋值给a,因为地址在运行时随机,所以不知道具体的值,把a的地址用x来表示吧。执行之后,p=&a,a=x
a = (int )(&(*