指针初始化:地址或值

dav*_*dev 4 c pointers

我对C语言中的指针初始化有疑问。

我知道这*ptr将给出该指针所指向的值。

ptr 会给你地址。

现在我得到以下语法:

int *ptr = (int *) malloc(sizeof(*ptr));
Run Code Online (Sandbox Code Playgroud)

为什么*ptr用堆的地址而不是值初始化?malloc()返回一个地址吧?

不应该是:

int *ptr;
ptr = malloc(...);
Run Code Online (Sandbox Code Playgroud)

Dav*_*rtz 5

在那一行,int *是类型。

int *ptr = (int *) malloc(sizeof(*ptr));
Run Code Online (Sandbox Code Playgroud)

只是压缩成一行:

int *ptr;
ptr = (int *) malloc(sizeof(*ptr));
Run Code Online (Sandbox Code Playgroud)


Bat*_*eba 5

与*ptr,*充当解引用运算符。

与int *ptr,*充当 的类型声明的一部分ptr。

所以这两个东西是完全不同的,即使*是使用。(乘法和注释块是*C中的进一步用途)。