开发者社区> 问答> 正文

c语言函数中传地址跟传指针有什么不同?

c语言函数中传地址跟传指针有什么不同?

我定义一个指针把指针变量作为参数 和 定义变量把变量的地址作为参数有什么不同?

例如: 网上找到的:

函数定义:
int queue_init(queue *Q){

Q->front = NULL;
Q->rear = NULL;

}
函数调用:
...
queue Q;
...
queue_init(&Q);
...
错误函数调用:
...
queue *Q;
...
queue_init(Q);
...
为什么后者是错误的调用?

展开
收起
a123456678 2016-06-06 09:51:26 2568 0
4 条回答
写回答
取消 提交回答
  • 专注物联网

    queue *Q没有分配具体的内存

    2019-07-17 19:27:41
    赞同 展开评论 打赏
  • 软件开发,安全加密

    queue *Q没有分配具体的内存

    2019-07-17 19:27:41
    赞同 展开评论 打赏
  • 乐于学习与分析

    queue *Q没有分配具体的内存

    2019-07-17 19:27:41
    赞同 展开评论 打赏
  • C语言中只存在按值传递这个概念。即便是指针,指针的值就是它所指向的地址,本质上,它也是值。
    对于你上面的:

    ...
    queue Q; //这句声明,会让编译器为之分配内存空间
    ...
    queue_init(&Q); //在这个调用中会解引用指针&Q,因此,&Q这个指针必须是合法的。
    ...
    错误函数调用:
    ...
    queue *Q; //声明了一个指向quque结构的指针Q,至于Q指向哪块内存区域,这里并没有指定。
    //此时如果解引用指针Q,那么便是属于非法访问内存。
    ...
    queue_init(Q); //很明显,这里的调用也就是非法的了。
    ...

    2019-07-17 19:27:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载