解释p =(char *)66的作用。

时间:2012-07-23 11:02:53

标签: c pointers

我在考试中有一个问题,我得到以下问题: -

第4行的含义是什么(第4行会发生什么?)

1    char i , *p;
2    i=65;
3    p=&i;
4    p=(char*)66;
5    (*p)++;

有人可以帮忙吗?

6 个答案:

答案 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行中,您正在修改内存中的随机位置,该位置可能甚至不属于您的应用程序,这可能(并且可能会)导致崩溃和其他令人讨厌的事情发生。