c语言函数中传地址跟传指针有什么不同?
我定义一个指针把指针变量作为参数 和 定义变量把变量的地址作为参数有什么不同?
例如: 网上找到的:
函数定义:
int queue_init(queue *Q){
Q->front = NULL;
Q->rear = NULL;
}
函数调用:
...
queue Q;
...
queue_init(&Q);
...
错误函数调用:
...
queue *Q;
...
queue_init(Q);
...
为什么后者是错误的调用?
C语言中只存在按值传递这个概念。即便是指针,指针的值就是它所指向的地址,本质上,它也是值。
对于你上面的:
...
queue Q; //这句声明,会让编译器为之分配内存空间
...
queue_init(&Q); //在这个调用中会解引用指针&Q,因此,&Q这个指针必须是合法的。
...
错误函数调用:
...
queue *Q; //声明了一个指向quque结构的指针Q,至于Q指向哪块内存区域,这里并没有指定。
//此时如果解引用指针Q,那么便是属于非法访问内存。
...
queue_init(Q); //很明显,这里的调用也就是非法的了。
...
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。