黑马程序员技术交流社区

标题: int* a ;*a=12这里有什么错误? [打印本页]

作者: atlas    时间: 2014-10-17 16:08
标题: int* a ;*a=12这里有什么错误?
int* a;是声明一个指针变量,
*a = 12;给变量赋值,
这哪里有错?
作者: 汪洋大海    时间: 2014-10-17 16:23
变量没有初始化,指针就没有具体的地址.
没有地址取值时就会报错.
百度的解释:
向已经释放的对象发送消息时会出现EXC_BAD_ACCESS。
作者: 微笑凡    时间: 2014-10-17 16:24
简单地说指针是存放数组地址的,他不能存放数值。。。
作者: atlas    时间: 2014-10-17 16:38
微笑凡 发表于 2014-10-17 16:24
简单地说指针是存放数组地址的,他不能存放数值。。。

假定a存储的位置是100;
*100 = 25;
这样写是不是相当于
a = 25;
作者: 杰克船长    时间: 2014-10-17 16:38
指针不能赋值
作者: atlas    时间: 2014-10-17 16:40
杰克船长 发表于 2014-10-17 16:38
指针不能赋值

指针是可以赋值的,但我这个不是给指针赋值,是给解指针赋值.OK?
作者: 杰克船长    时间: 2014-10-17 17:19
atlas 发表于 2014-10-17 16:40
指针是可以赋值的,但我这个不是给指针赋值,是给解指针赋值.OK?

int*p为为指针申请变量空间,而不是地址
然后应该*p=&q, 要去找q的地址,确定指针指向的地址
然后才能赋值,而且这个赋值也不是给指针赋值,而是将数值传递到指针所指向的地址,你连地址都没有,数值传不进去。
作者: IOS小菜鸟    时间: 2014-10-17 17:24
int * a,你这个a是个野指针啊,里面存的值是随机的,指向的内存可能是受限制被保护的。*a = 12,就可能让被保护内存里面的数据改成12了。所以会报错
作者: 弹琴骚年    时间: 2014-10-17 20:59
跟李明杰老师说过的代码一样:
int *p;
printf("%d\n", *p);

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

同意这位同学的解说!
作者: 米匠    时间: 2014-10-18 22:13
*a是接收地址的,而不是值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2