错误:初始化指针地址时从“int”到“int*”的无效转换[-fpermissive]

问题描述 投票:0回答:1

我试图在以下代码中将 0x0010 的值分配给指针 ptr1,该代码演示了指针如何与加法/减法交互:

#include <stdio.h>
int main(void) {
  int * ptr1=0x0010;
  double * ptr2=0x0010;
  printf("%p %p\n", ptr1+1, ptr1+2);  // Increment by 4 then 8
  printf("%p %p\n", ptr2+1, ptr2+2);  // Increment by 8 then 16

  printf("%p %p\n", ptr1, ptr2);
  ptr1++; // Increment by 4
  ptr2++; // Increment by 8
  printf("%p %p\n", ptr1, ptr2);
  return 0;
}

在初始化指针 ptr1 和 ptr2 的地址(第 3 行和第 4 行)的行中编译时出现错误,

error: invalid conversion from 'int' to 'int*' [-fpermissive]
。为什么这两行会引发错误,我该如何避免?

c pointers
1个回答
3
投票

为什么?
因为编译器试图阻止您将任意地址分配给指针(您以后可能会使用)。

我怎样才能避免它?
当人类程序员认为自己比编译器更聪明时,就会使用转换。

试试这个:

  int *ptr1 = (int*)0x0010;
  double *ptr2 = (double*)0x0010;

让后果在你头上......


"演示指针如何与加法/减法交互的代码"
通常称为指针运算

© www.soinside.com 2019 - 2024. All rights reserved.