*p1=a[3]与p1=&a[3]什么区别???
答案:5 悬赏:80 手机版
解决时间 2021-03-31 15:02
- 提问者网友:别再叽里呱啦
- 2021-03-31 02:18
*p1=a[3]与p1=&a[3]什么区别???
最佳答案
- 五星知识达人网友:想偏头吻你
- 2021-03-31 02:41
*p1=a[3] ; 看你想做什么呢?定义的话,a[3]里存放是你希望p1所指向的合法地址吗?不是的话当然出错。 不是定义是运算的话,表示将a[3]的内容赋值到p1所指向的内存单元,如果该单元禁止访问也会出错。
p1 = &a[3]明确表示了将该单元自身的地址赋给p1,合法;
指针使用的时候需要确定其所指单元合法,否则会出错。
指针定义的时候赋初值也要考虑该初值的合法性
p1 = &a[3]明确表示了将该单元自身的地址赋给p1,合法;
指针使用的时候需要确定其所指单元合法,否则会出错。
指针定义的时候赋初值也要考虑该初值的合法性
全部回答
- 1楼网友:胯下狙击手
- 2021-03-31 06:25
前一个,指针p1你怎么知道它会指向哪呢?就有可能造成内存越界,运行时就会提示内存出错;
第二个则是指定p1指向a[3].追问*p1=a[3]难道不是是指针p指向a的第3个元素???
第二个则是指定p1指向a[3].追问*p1=a[3]难道不是是指针p指向a的第3个元素???
- 2楼网友:神鬼未生
- 2021-03-31 05:54
你的p1是一个指针吗?
*p1=a[3];是说将数组a的第三个元素放到p1这个指针指向的内存空间中.
我想你的p1肯定没指向空间,只是一个申请的指针.所以*p1=a[3];内存出错,因为p1根本没指向一块被申请的内存.p1=&a[3]是将一个地址给了p1所以没问题.你记着,指针本身只能存放一个地址,如果你要让他放一个变量,必须让他先指向一块地址.不能申请了就拿来放东西.
换个说法让你理解更深刻:
指针就相当于箱子的编号,编号就是内存地址,而变量就是放东西的箱子.
如果你只有一个箱子的编号,而根本没设定一个箱子.那么你想你能在编号里放东西否?
*p1=a[3];是说将数组a的第三个元素放到p1这个指针指向的内存空间中.
我想你的p1肯定没指向空间,只是一个申请的指针.所以*p1=a[3];内存出错,因为p1根本没指向一块被申请的内存.p1=&a[3]是将一个地址给了p1所以没问题.你记着,指针本身只能存放一个地址,如果你要让他放一个变量,必须让他先指向一块地址.不能申请了就拿来放东西.
换个说法让你理解更深刻:
指针就相当于箱子的编号,编号就是内存地址,而变量就是放东西的箱子.
如果你只有一个箱子的编号,而根本没设定一个箱子.那么你想你能在编号里放东西否?
- 3楼网友:你可爱的野爹
- 2021-03-31 04:20
你这里p1是指针。指针存储的是地址 p1=&a[3] 就是把a数组的第4个元素的地址存进p1中
*p1是指p1存储的地址所表示的值。
比如说p1=&a[3] *p1=5;这就相当于把5赋值给数组a的第四个元素
但假如直接是int *p;
*p =5 ;的话。 这样就很危险了。 因为你声明一个指针p 里面本身会有一个值。 这个值是随机的某一个地址 然后把这个随机的地址里面的值改为5 。 这个随机的值可能是系统所必须得,而我们却把它改了。,所以很可能造成系统崩溃的。 所以会提示内存出错。 这也就是慎用指针的原因了。
*p1是指p1存储的地址所表示的值。
比如说p1=&a[3] *p1=5;这就相当于把5赋值给数组a的第四个元素
但假如直接是int *p;
*p =5 ;的话。 这样就很危险了。 因为你声明一个指针p 里面本身会有一个值。 这个值是随机的某一个地址 然后把这个随机的地址里面的值改为5 。 这个随机的值可能是系统所必须得,而我们却把它改了。,所以很可能造成系统崩溃的。 所以会提示内存出错。 这也就是慎用指针的原因了。
- 4楼网友:鱼芗
- 2021-03-31 03:28
p1是个指针变量,指针变量指向的是内存地址,所以
p1=&a[3]是正确的。&为取地址符号。
而a[3]是一个整型常量,*p1是个地址,所以不能直接赋值。
p1=&a[3]是正确的。&为取地址符号。
而a[3]是一个整型常量,*p1是个地址,所以不能直接赋值。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯