c语言中*p=&a和p=&a有什么区别
12个回答
2018-06-26 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
总得来说没区别,就是指针初始化的时间不同而已
int *p = &a;//这里p声明的时候直接初始化它的值为变量a的地址
int *p;//声明指针p,p的值不确定可能指向任何地址,
p = &a;//显示初始化使p指向a的地址
int *p = &a;//这里p声明的时候直接初始化它的值为变量a的地址
int *p;//声明指针p,p的值不确定可能指向任何地址,
p = &a;//显示初始化使p指向a的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
举个例子吧: a是一个数组,它在内存中的初始地址比如说是0x11111111(简单假设),且a[0]的值是1,也就是说,内存0x11111111中存储的值是1。 于是,&a[0]=0x11111111,a[0]=1。 int *p; p=&a[0]; 指针p会有一个自己的内存地址,通常占用4个字节(比如初始地址是0x22222222)。p的值是&a[0],也就是说从0x22222222开始,后面4个字节中存储的值是0x11111111。 *p的值就等于p所指向的内存地址中存储的值,也就是a[0]。所以*p等于1。 如果*p=&a[0]的话,很容易出问题。比如说int *p之后,p的初始值可能是0xCCCCCCCC(Debug版本)或者0x00000000(Release版本)。这个时候,如果你写一句*p=&a[0]的话,将会把0xCCCCCCCC或者0x00000000内存之后4个字节的值变为0x11111111。 而0xCCCCCCCC和0x00000000内存区通常是不可写的,这样就会报错。
采纳哦
采纳哦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在定义指针的同时让指针指向某个地址 如int *p=&a;不能直接使用*p=&a; p=&a;代表的是让p指向变量a的地址
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有啊,*p是个指针,他储存的是一个变量的地址。你把A[0]里的数据赋给他,是储存在那个变量中,不是在存*p中。另一个P是个变量,A[0]中的数据时存在P中
例如:int *p;
p=&b;
*p=a[0];
b==a[0] 值是放在b中
另一个是放在P中 ,不同的
例如:int *p;
p=&b;
*p=a[0];
b==a[0] 值是放在b中
另一个是放在P中 ,不同的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询