我试图在以下代码中将 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]
。为什么这两行会引发错误,我该如何避免?
“为什么?”
因为编译器试图阻止您将任意地址分配给指针(您以后可能会使用)。
“我怎样才能避免它?”
当人类程序员认为自己比编译器更聪明时,就会使用转换。
试试这个:
int *ptr1 = (int*)0x0010;
double *ptr2 = (double*)0x0010;
让后果在你头上......
"演示指针如何与加法/减法交互的代码"
通常称为指针运算。