【问题标题】:C - pointers and change address [closed]C - 指针和更改地址
【发布时间】:2013-07-12 09:44:12
【问题描述】:

我有这段代码可以给指针一个地址并打印它,但是为什么这不起作用??

void main()
{
int *b = (int*) 32;
printf("%d\n",b[0]);
}

【问题讨论】:

标签: c


【解决方案1】:

b[0] 取消引用指向您尚未分配的内存的数组。这样做的影响是不确定的。如果您的进程无法读取地址 32,您可能会返回一个值,或者您的程序可能会崩溃。

【讨论】:

  • 如何让它可读?!我想读那个
  • 依赖于平台。如果操作系统决定该地址不可读,则您无能为力。为什么要读取内存中的这个特定位置?或者你想打印 b 的地址而不是它指向的地址
【解决方案2】:
int *b = (int*) 32;

上面的代码将内存地址 32 分配给这个指针,我不认为这是你想要的,当你调用 printf 时你会得到拒绝访问错误, 希望以下代码对你有用

int a = 32;
int *b = &a;
printf("%d\n",b[0]);
//output 32

printf( "%d\n", &b);
// output b pointer address.

【讨论】:

  • 最后一个应该是%p
  • 除了最后一个是 %p 之外,我希望其意图是打印 b 而不是 &b
  • 我想更改地址而不是打印地址
  • 如果要更改地址,int b = (int) 32;是正确的,但是 (int*)32 是无效的指针地址,你应该给它分配一个有效的指针地址。
猜你喜欢
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 2013-09-26
  • 2021-09-06
  • 1970-01-01
  • 2021-04-08
  • 2021-12-24
  • 1970-01-01
相关资源
最近更新 更多