A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© atlas 中级黑马   /  2014-10-17 16:08  /  2729 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int* a;是声明一个指针变量,
*a = 12;给变量赋值,
这哪里有错?

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

12 个回复

倒序浏览
变量没有初始化,指针就没有具体的地址.
没有地址取值时就会报错.
百度的解释:
向已经释放的对象发送消息时会出现EXC_BAD_ACCESS。
回复 使用道具 举报
简单地说指针是存放数组地址的,他不能存放数值。。。
回复 使用道具 举报
微笑凡 发表于 2014-10-17 16:24
简单地说指针是存放数组地址的,他不能存放数值。。。

假定a存储的位置是100;
*100 = 25;
这样写是不是相当于
a = 25;
回复 使用道具 举报
指针不能赋值
回复 使用道具 举报

指针是可以赋值的,但我这个不是给指针赋值,是给解指针赋值.OK?
回复 使用道具 举报
atlas 发表于 2014-10-17 16:40
指针是可以赋值的,但我这个不是给指针赋值,是给解指针赋值.OK?

int*p为为指针申请变量空间,而不是地址
然后应该*p=&q, 要去找q的地址,确定指针指向的地址
然后才能赋值,而且这个赋值也不是给指针赋值,而是将数值传递到指针所指向的地址,你连地址都没有,数值传不进去。

点评

另外请教大侠,解指针是个什么概念?  发表于 2014-10-17 17:23
回复 使用道具 举报
int * a,你这个a是个野指针啊,里面存的值是随机的,指向的内存可能是受限制被保护的。*a = 12,就可能让被保护内存里面的数据改成12了。所以会报错

评分

参与人数 1黑马币 +10 收起 理由
崔石炫 + 10 很给力!

查看全部评分

回复 使用道具 举报
跟李明杰老师说过的代码一样:
int *p;
printf("%d\n", *p);

错误原因:指针变量未经初始化,不能拿来使用。
*a = 12;  就相当于使用了这个指针变量。。
回复 使用道具 举报
int *a; //声明了一个指向int类型的指针变量,但是没有让a指向任何int类型的变量
*a = 12; //a此时是个野指针,改写野指针指向的内存地址的内容是不安全的。
回复 使用道具 举报
Lxy 中级黑马 2014-10-18 01:10:08
11#
IOS小菜鸟 发表于 2014-10-17 17:24
int * a,你这个a是个野指针啊,里面存的值是随机的,指向的内存可能是受限制被保护的。*a = 12,就可能让被 ...

同意这位同学的解说!
回复 使用道具 举报
米匠 中级黑马 2014-10-18 22:13:36
12#
*a是接收地址的,而不是值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马