C - 传递结构指针VS整数指针指向函数

Ran*_*raj 1 c struct pointers linked-list data-structures

void main(){
 int a = 100;
 int* pa = &a;
 *pa = 999;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将使a的值为999.但是为什么结构的指针不会以相同的方式处理?

struct node* head = (struct node*) malloc(sizeof(struct node));
head -> data = 6;
head -> next = NULL;
Run Code Online (Sandbox Code Playgroud)

为什么我们不能使用*head -> data = 6?为什么传递someMethod(pa)是通过引用someMethod(head)传递并通过值?参考

das*_*ght 6

为什么我们不能使用*head -> data = 6

因为->是取消引用运算符替换星号*.你也可以用星号重写

(*head).data = 6
Run Code Online (Sandbox Code Playgroud)

您需要括号,因为dot的优先级高于间接.->已经引入了运算符,以便在指向structs的情况下使间接更具可读性.

为什么传递someMethod(pa)是通过引用someMethod(head)传递并且通过值传递?

它都是通过值传递的,因为指针也是按值传递的.传递指针使您可以引用原始变量并对其进行修改,但会复制指针本身.