
Int a=1; Int *p; p=&a; printf(“%d\n”,*p); 和Int a=1; Int*p; *p=a; printf(“%d\n”,*p); 一样吗?
4个回答
展开全部
首先指出书写问题:int 的首字母不能大写,双引号也不能用全角。
然后是内容,第一种写法正确,第二种写法是错误的!
在运行了int *p;这句后,p被随意分配了一个值,这个值是无意义的。
在vc中运行
void main(){
int *p;
cout<<p<<endl;
}
结果是OxCCCCCCCC
可以认为 这是一个内存地址。
然而,这个OxCCCCCCCC地址在内存中并不存在。
下一句*p=a;也就是*p=1;的意思是,把1存入内存,地址是OxCCCCCCCC
实际上OxCCCCCCCC这个地方,在内存中并不存在。
因而运行时会出错。
指针在使用前,一定要做初始化,也就是给指针赋初值。
也就是p=&a;这一句的工作。
然后才能使用指针。*p也变得合法。
然后是内容,第一种写法正确,第二种写法是错误的!
在运行了int *p;这句后,p被随意分配了一个值,这个值是无意义的。
在vc中运行
void main(){
int *p;
cout<<p<<endl;
}
结果是OxCCCCCCCC
可以认为 这是一个内存地址。
然而,这个OxCCCCCCCC地址在内存中并不存在。
下一句*p=a;也就是*p=1;的意思是,把1存入内存,地址是OxCCCCCCCC
实际上OxCCCCCCCC这个地方,在内存中并不存在。
因而运行时会出错。
指针在使用前,一定要做初始化,也就是给指针赋初值。
也就是p=&a;这一句的工作。
然后才能使用指针。*p也变得合法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
话说:
第一个:
int a=1; \\定义一个整型变量a并赋初值1
int *p; \\定义一个整型指针变量p 没赋初值,但是紧接着下面赋啦
p=&a; \\将a的地址赋给p
printf("%d\n",*p); \\利用指针运算符*打印出p指向的那个变量a的值
第二个:
int a=1; \\略
int *p; \\ 没赋初值,野指针!!危险
*p=a; \\往指向不明的野指针赋值,危险!p有可能指向系统关键位置!!
printf("%d\n",*p); \\不解释
第一个:
int a=1; \\定义一个整型变量a并赋初值1
int *p; \\定义一个整型指针变量p 没赋初值,但是紧接着下面赋啦
p=&a; \\将a的地址赋给p
printf("%d\n",*p); \\利用指针运算符*打印出p指向的那个变量a的值
第二个:
int a=1; \\略
int *p; \\ 没赋初值,野指针!!危险
*p=a; \\往指向不明的野指针赋值,危险!p有可能指向系统关键位置!!
printf("%d\n",*p); \\不解释
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第1个输出的是1,第2个会报错。
首先想要第2个正确,需要给P初始化一个可以写入的合理地址值。
只有这样,才能使第2个输出的结果也是1.
当时就算如此,这两个的内部实现也是不一样的。
第一个是p指向了a的地址,输出的是a内存所在的值。
第二个是把a的值传给了p所指向的地址,然后输出p指向地址中的值。
首先想要第2个正确,需要给P初始化一个可以写入的合理地址值。
只有这样,才能使第2个输出的结果也是1.
当时就算如此,这两个的内部实现也是不一样的。
第一个是p指向了a的地址,输出的是a内存所在的值。
第二个是把a的值传给了p所指向的地址,然后输出p指向地址中的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输出是一样的。但是前者的p代表的是a的地址、、、后者p也是一个地址只不过是随机的地址。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询