我正在读指针,但我对它们的性质感到困惑.这就是我的意思.
int x = 4;
//Here I declare p as integer pointer
int *p;
// Here I assign memory address of x to pointer p
p = &x;
// The line below prints result 4 which is expected. If I miss asterisk before p I'll get memory address instead of data which that memory address holds.
printf("%d", *p)
Run Code Online (Sandbox Code Playgroud)
总结当星号在指针之前闪烁时它"指向"内存地址.如果星号在指针之前,它"指向"实际数据.到现在为止还挺好.
但为什么这段代码正常工作?
int someIntVariable = 10;
const int *p = &someIntVariable;
printf("%d", *p);
Run Code Online (Sandbox Code Playgroud)
如果我错过星号,编译器会给我一个警告"警告:初始化从指针生成整数而没有强制转换"
我期望p(如果编译器允许我使用不带星号的p)来保存someIntVariable的内存地址而不是它的"value";
这里发生了什么?