C的指针问题
# include <stdio.h>int main()
{
int i = 5;
int *p, *q;
p = &i;
*q = p;
printf("%d\n",*q);
return 0;
}
为什么程序会出错? *q = p不行吗?不同类型不是可以相互赋值吗,只是会丢失数据而已啊!
那你非要说 不同类型可以相互赋值我也是没办法的。
上边这句话从汇编角度上说 应该是可以的,毕竟寄存器之间可以委屈转换一下,但是除非你不用编译器,否则就得遵循人家编译器的规则。(有的隐式转换可以,但是有的就有限制啊)
还有一个地方,你q这个指针变量没有初始值,就算编译器不跟你计较,系统也会找你的事啊。万一指向0x00000000了呢?
n0noper 发表于 2016-6-30 12:23
那你非要说 不同类型可以相互赋值我也是没办法的。
上边这句话从汇编角度上说 应该是可以的,毕竟寄 ...
q里面不是垃圾值吗? {:10_249:} 学习电脑 发表于 2016-6-30 17:59
q里面不是垃圾值吗?
你确定?
垃圾值到底是多少?万一是0x00000000呢?
具体调试,我也不知道 {:10_250:} n0noper 发表于 2016-6-30 22:10
你确定?
垃圾值到底是多少?万一是0x00000000呢?
好吧,谢谢 edc41113359 发表于 2016-6-30 21:19
{:10_282:} {:10_269:}你要相互赋值也不是没有办法,强制类型转换就行了。 GameBelial 发表于 2016-7-1 10:22
你要相互赋值也不是没有办法,强制类型转换就行了。
不转换就不行? 指针不赋初值,野指针比较危险 GameBelial 发表于 2016-7-1 10:22
你要相互赋值也不是没有办法,强制类型转换就行了。
似乎转换类型也不行 养成良好的变成习惯,不要使用野指针。除非你知道自己在做什么 不行只能
int main()
{ int i = 5;
int *p,*q;
p = &i;
q = p;
printf("Hello world!%d\n",*p);
printf("Hello world!%d\n",*q);
return 0;
} 阁龙1427 发表于 2016-7-2 11:24
养成良好的变成习惯,不要使用野指针。除非你知道自己在做什么
野指针就是每赋值? 学习电脑 发表于 2016-7-2 18:38
野指针就是每赋值?
任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。 阁龙1427 发表于 2016-7-4 09:15
任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建 ...
xiexie 学习电脑 发表于 2016-7-4 10:12
xiexie
“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:
(1)、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
(2)、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。
这个是在chao_yu的博客中看到的,这个解释能理解吧 :) 学习电脑 发表于 2016-7-4 10:12
xiexie
就像玩指身体部位的游戏。让你指哪里就指哪里,初始化的时候要指向脚(赋初值),然后让你指耳朵就指向耳朵。如果让你指脸你指人家屁股就是要出问题的吧。 阁龙1427 发表于 2016-7-4 10:35
“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易 ...
恩,谢谢
页:
[1]