C 传递给函数的结构指针

C 传递给函数的结构指针,c,function,pointers,C,Function,Pointers,我无法理解传递给函数的指针。这里有一个结构指针,它被传递给一个函数,指针被递增一些值,它不会反映在指针变量中。我猜这是按值调用的,但如何调用?你能解释一下吗 #include<stdio.h> #include<stdlib.h> typedef struct node{ int data; }node; void change_addr(node *ptr){ ptr += 10; printf("Inside Address : %p\n"

我无法理解传递给函数的指针。这里有一个结构指针,它被传递给一个函数,指针被递增一些值,它不会反映在指针变量中。我猜这是按值调用的,但如何调用?你能解释一下吗

#include<stdio.h>
#include<stdlib.h>

typedef struct node{
    int data;
}node;

void change_addr(node *ptr){
    ptr += 10;
    printf("Inside Address : %p\n",ptr);
}

int main(){
    node x = {100};
    printf("Address : %p\n",x);
    change_addr(&x);
    printf("Address : %p\n",x);
    return 7;
}
#包括
#包括
类型定义结构节点{
int数据;
}节点;
无效更改地址(节点*ptr){
ptr+=10;
printf(“内部地址:%p\n”,ptr);
}
int main(){
节点x={100};
printf(“地址:%p\n”,x);
更改地址(&x);
printf(“地址:%p\n”,x);
返回7;
}

将结构的地址传递给函数。此参数在函数内递增,不能从外部访问。类似于如果在函数中传递和integer并递增它会发生的情况。如果要递增
数据
,则需要通过传递到函数中的指针来访问它。例如
node->data=0
相当于
(*节点)。数据=0


&node
是节点结构的地址。在写入返回地址并跳转到函数之前,将此参数推送到调用堆栈上。请参见以下对问题的解释
change\u addr()
现在可以在
main()
看不到值的情况下读取和写入此值,因为它是在
change\u addr()
执行完成后从堆栈中弹出的。

将结构的地址传递到函数中。此参数在函数内递增,不能从外部访问。类似于如果在函数中传递和integer并递增它会发生的情况。如果要递增
数据
,则需要通过传递到函数中的指针来访问它。例如
node->data=0
相当于
(*节点)。数据=0

&node
是节点结构的地址。在写入返回地址并跳转到函数之前,将此参数推送到调用堆栈上。请参见以下对问题的解释
change\u addr()
现在可以在
main()
看不到值的情况下读取和写入此值,因为它是在执行
change\u addr()
完成后从堆栈中弹出的。

声明

node x = { 100 };
为节点结构分配内存,并对其进行初始化。声明

change_addr(&x);
获取该结构的内存地址,它只是一个类似于1000的数字,并通过值将其传递给change_addr()函数。在该函数中,将100添加到指针的本地副本中,名为
ptr
,这使它指向远远超出x所在位置的内存区域(如果x是一个数组而不是单个结构,它将指向第101个元素)。然后返回,这将丢弃地址的本地副本,并返回到从未修改x的初始堆栈帧

在change_addr()函数中,您可以通过指针访问结构的内容来更改它。例如,
ptr->data=200
会更改其数据。但是如果出于某种原因需要更改指针地址本身,则必须创建指向指针的指针,并将其传递给采用适当参数类型的函数。

声明

node x = { 100 };
为节点结构分配内存,并对其进行初始化。声明

change_addr(&x);
获取该结构的内存地址,它只是一个类似于1000的数字,并通过值将其传递给change_addr()函数。在该函数中,将100添加到指针的本地副本中,名为
ptr
,这使它指向远远超出x所在位置的内存区域(如果x是一个数组而不是单个结构,它将指向第101个元素)。然后返回,这将丢弃地址的本地副本,并返回到从未修改x的初始堆栈帧

在change_addr()函数中,您可以通过指针访问结构的内容来更改它。例如,
ptr->data=200
会更改其数据。但是,如果出于某种原因希望更改指针地址本身,则必须创建指向指针的指针,并将其传递给采用适当参数类型的函数