我在考试中有一个问题,我得到以下问题: -
第4行的含义是什么(第4行会发生什么?)
1 char i , *p;
2 i=65;
3 p=&i;
4 p=(char*)66;
5 (*p)++;
有人可以帮忙吗?
答案 0 :(得分:3)
查看This tutorial,它提供了有关指针的一些很好的信息。我不想告诉你它究竟是做什么的,因为它不会教任何东西,而是给你一个鹦鹉时尚的答案,你会被困在下一个这样的问题上。
你想要寻找的区域是施法和指针。
答案 1 :(得分:2)
“66”将被转换为(char *)类型
答案 2 :(得分:1)
p=(char*)66;
将内存中的66地址转换为指针,然后在下一行中将其递增。原样,这段代码可能无法正常工作,除非您有权在RAM中写入字节66。
答案 3 :(得分:1)
我修改第4行以使代码合理。
1 char i , *p;
2 i=65;
3 p=&i;
4 *p=(char)66;
5 (*p)++;
在第1行中,您有一个char i
和一个指向char p
的指针。
在第2行中,i
保存值65,即ASCII中的字母“A”。
在第3行,p
指向i
的地址。
在第4行中,p
指向的地址中的值为66
,即ASCII中的字母B
。
由于p
指向i
的地址,因此i
的值为66
。
在第5行中,p
指向的地址中的值从66
增加到67
,这使其成为ASCII中的字母C
如果您打印i
或*p
,您将收到字母'C'。
答案 4 :(得分:1)
由于p
是指针(在本例中为char),因此它包含一个地址。第4行只是将地址66
写入p
。执行该行后,p
指向地址66
。这是否是有效的地址是一个不同的问题。
答案 5 :(得分:0)
我发现在学习编程语言时,学习如何大声说出来有助于理解语言的含义:
所以p = (char *)66;
读给我的是“将66分配给p”,而正如其他人所说,(char *)
是演员。它是将(改变类型)66转换为char *
的类型,它被称为指向char的指针。或者,字符变量的地址。
基本上整行都说“在地址66处,你会找到一个字符”,并将66分配给之前指向i
中所持字符的指针。
在这种情况下使用星号(*
)与行*p = (char) 66;
不同,这意味着“p
的值为66,它是一个字符值”。因此,虽然我们查看的行首先修改了p
中的地址,但第二行修改了p
中已经存在的地址的值。
此外,最后一行((*p)++
)表示:“获取p的值,并为其添加1,无论它是什么。”
请记住,这些不是这个问题的教科书答案,这是你在回答之前对这个问题的看法。另外,如果这确实是你在测试中给出的代码,那么重要的是要注意在现实生活中这样做是个坏主意。在第4行和第5行中,您正在修改内存中的随机位置,该位置可能甚至不属于您的应用程序,这可能(并且可能会)导致崩溃和其他令人讨厌的事情发生。