-9

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

第 4 行是什么意思(第 4 行发生了什么?)

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

有人可以帮忙吗?

4

6 回答 6

3

看看这个教程,它提供了一些关于指针的好信息。我不想告诉你它的确切作用,因为它不会教任何东西,而是给你一个鹦鹉时尚的答案,你会被下一个这样的问题难住。

您想要寻找的区域是铸造和指针。

于 2012-07-23T11:04:51.383 回答
2

"66" 将被转换为 (char *) 类型

于 2012-07-23T11:04:50.913 回答
1

p=(char*)66;将内存中的地址 66 转换为指针,然后在下一行将其递增。照原样,此代码可能无法正常工作,除非您碰巧有权写入 RAM 中的 66 字节。

于 2012-07-23T11:07:11.247 回答
1

我修复了第 4 行以使代码更合理。

1    char i , *p;
2    i=65;
3    p=&i;
4    *p=(char)66;
5    (*p)++;
  • 在第 1 行,您有一个 chari和一个指向 char 的指针p

  • 在第 2 行,i保存值 65,即 ASCII 中的字母“A”。

  • 在第 3 行中,p指向 的地址i

  • 在第 4 行中,地址中p指向的值为66,即 ASCII 中的字母B。既然p指向 的地址i,那么i也有 的值66

  • 在第 5 行中,p指向的地址中的值从66to增加67,这使其成为CASCII 中的字母。

如果你打印i,否则*p你会得到字母“C”。

于 2012-07-23T11:35:15.103 回答
1

由于p是一个指针(在这种情况下指向 char ),它拥有一个地址。第 4 行只是将地址66写入p. 行执行后,p指向地址66。这是否是一个有效的地址是一个不同的问题。

于 2012-07-23T11:50:53.700 回答
0

我发现在学习一门编程语言时,学习如何大声说出来有助于理解该语言的含义:

所以p = (char *)66;对我来说是“将 66 分配给 p”,正如其他人所提到的,这(char *)是一个演员表。它将 66 转换(更改类型)char *为称为 char 的指针。或者,字符变量的地址。

基本上整行都是在说“在地址 66,你会找到一个字符”,并将 66 分配给先前指向 . 中保存的字符的指针i

*在这种情况下,星号 ( ) 的使用与*p = (char) 66;表示“at 的p值为 66,它是字符值”的行不同。因此,虽然我们第一次看到的行修改了保存在的地址p,但第二行修改了已经保存在地址中的值p

此外,最后一行 ( (*p)++) 的意思是:“取 p 的值,然后给它加 1,不管它是什么。”

请记住,这些不是这个问题的教科书答案,这是你在回答之前思考问题的方式。此外,如果这确实是您在测试中给出的代码,请务必注意,在现实生活中这样做是个坏主意。在第 4 行和第 5 行中,您正在修改内存中可能甚至不属于您的应用程序的随机位置,这可能(并且可能会)导致崩溃和其他令人讨厌的事情发生。

于 2012-07-23T13:15:04.657 回答