iva*_*van 2 c pointers memory-address
我读过的关于地址运算符的大部分内容&,都说它用于获取地址 - 地址。不过,我最近听到它的描述有所不同,因为它产生了一个成熟的指针。
鉴于以下 C 代码,
int i1 = 5;
int *p1;
p = &i1;
Run Code Online (Sandbox Code Playgroud)
我的理解是通过存储存储数据的地址来p1引用 int并记住该位置中的数据将被解释为 an (这决定了要读取的字节数以及如何解释读取的数据)。5i1int
地址运算符是否同时产生地址和“类型感知”,或者类型感知是否只是隐含的,因为它p1被声明为int指针?
让我对此感到疑惑的一件事是看到如下代码:
void myFunc(int *ptr);
int i = 5;
myFunc(&i);
Run Code Online (Sandbox Code Playgroud)
该&操作员只需返回一个指向它的操作数。如果其操作数是 ,int则结果类型将为int*. 如果其操作数是 ,int*则结果类型将为int**. 例如,这个程序:
#include <stdio.h>
struct test {
int a;
int b;
int d;
};
int main ( ) {
struct test foo = { 0, 0, 0 } ;
printf( "%lu\n", (unsigned long)(&foo + 2) - (unsigned long)&foo );
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上输出 24,因为sizeof(struct test)是 12,并且 的类型&foo已知是struct test *,所以&foo + 2计算了两个struct tests的偏移量。