最近编写C程序发现一个问题, 传统教材里说的传址, 实际上并没有这回事, 是吗? 比如说
void print(int sum); 调用函数的时候函数内的sum是实参的一份复制(int sum = 实参), 但实际上, 即便是传递指针: void print(int *sum); 也只是把指针复制了一份, 因此可以改变指针所指向的内容, 但是并不能改变作为实参的指针本身的内容, 是吗?例如: #include <stdio.h> #include <stdlib.h> typedef struct Node { int num; struct Node *next; } Node; void init(Node *p) { p = malloc(sizeof(Node)); /* Header */ p->num = 1; p->next = NULL; } int main(void) { Node *p; init(p); printf("%d\n", p->num); return 0; } 这一段程序如果编译运行的话, 会core dumped, 就是因为在main函数执行完init(p)的时候init函数内的p是实参p的一份拷贝, 所以改变的实际上是拷贝版本, 最终导致printf的时候访问到了非法地址而造成的。这是我的猜想, 是这样子的吗?
