在c语言中,int *p,a; *p=&a,和p=&a有什么区别?

如题所述

#include <stdio.h>  
int main()
{
int *p,a=0xAA; //声明 int指针变量 p 和 int变量a 

// *p=&a; //把指针p 指向的值 改变为 变量a的地址 ,是无效的
//            因为a的地址长度为4字节,而指针p指向的值为int,即两字节的。 
printf("程序运行前的值\n");
printf("p的地址 = 0x%X \n指针p指向的值 = 0x%X \n指针p自己的值 = 0x%X\n",&p,*p,p);
printf("a的地址 = 0x%X \na的值 = 0x%X\n",&a,a);

*p=a; //指针p指向的值 改变为 a的值 
printf("\n执行 *p=a; 指令后的值\n");
printf("p的地址 = 0x%X \n指针p指向的值 = 0x%X \n指针p自己的值 = 0x%X\n",&p,*p,p);
printf("a的地址 = 0x%X \na的值 = 0x%X\n",&a,a);

p=&a; //把指针p自己的值 改变为 变量a的地址,同时指针p指向变量a的值了
printf("\n执行 p=&a; 指令后的值\n");
printf("p的地址 = 0x%X \n指针p指向的值 = 0x%X \n指针p自己的值 = 0x%X\n",&p,*p,p);
printf("a的地址 = 0x%X \na的值 = 0x%X\n",&a,a);

return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-12-14
这样问说明你对指针的概念还不清楚,以下两种方式等价:
一、先声明指针,再给指针赋值
int *p,a;
p=&a;
二、定义指针的同时给它赋值
int a,*p=&a; //这里的*p可以解释成int * p,int *表示p是指向int型变量的指针追问

就是说两者是一样的,第二种比第一种少了一步?

追答

没错,你换成别的类型试一下,也许更能明白,比如int型
以下两种方式一样:
一、
int a;
a=1;
二、
int a=1;

本回答被网友采纳
相似回答