【问题标题】:Adding ASCII value to integer using pointers使用指针将 ASCII 值添加到整数
【发布时间】:2023-04-07 20:57:01
【问题描述】:

我在 C++ 中使用指针。 sn-p 如下所示。

int i=97;
char c='A', &cp=c;
cp+=i;
printf("%d",cp);`

'A' 的 ASCII 为 65,那么 cp 将变为 97 + 32 即 162。

但我得到的输出是 -94。

可能是什么问题?

【问题讨论】:

  • Arun AJ 您使用的是什么 C 编译器?还是 C++ 的?
  • 此代码是 C++,而不是 C。char & 是 C 中不可用的引用(不是指针)。
  • 对不起,我的错误。代码是 C++。

标签: c++ pointers reference ascii


【解决方案1】:

cp += i 类似于cp = cp + i;,其中cp + i 总和为162,然后将162 分配给char

将超出范围的值分配给 char 会导致实现定义的行为。

在这种情况下,值通过减去 256 并赋值为 -94。


然而,这段代码看起来不像带有char &cp = c; 的C。更像 C++。嗯。

【讨论】:

  • @ArunAJ 仍然想知道:您使用的是什么 C 编译器?还是 C++ 的?
  • 对不起,它是 C++。我正在使用 OnlineGDB。
【解决方案2】:

无论您在考虑什么,指针都是不同的东西。指针可以指向一个地址,并且该地址不能由用户指定为常量。它只能是任何变量的地址。你给出的陈述是无效的。例如。

int a=10;
int * b = &a;  // pointing b to a's address 
int * c;       // pointer pointing to nothing
c = &a;        // pointing c to a's address
printf("%d = %d = %d",a, *b, *c);  //pointer value is accessed by *varilable name
*c = 20;       // changing value of a 
printf("%d =%d = %d", a, *b, *c);   // will print 20 =20 = 20
c=20;    //invalid statement because we can not assign address as constant
c=c+1;   // valid statement and increment address by sizeof(int)

【讨论】:

  • 如果您使用的是 c++ 编译器,则有符号值为 162(2 的补码中的字符为 -94)
猜你喜欢
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
相关资源
最近更新 更多