c语言中把*和&放在一块用是什么意思?(有简短例子)

来源:百度知道 编辑:UC知道 时间:2024/05/04 06:03:35
以下是从数据结构中摘取出来的例子,因为只想明白题目中问的那个问题,所以只把相关的地方拿了上来。希望大家给点提示,谢谢

#include <stdio.h>
#include <malloc.h>
typedef char ElemType;

typedef struct QNode
{
ElemType data;
struct QNode *next;
} QType; /*链队中结点的类型*/

typedef struct qptr
{
QType *front,*rear;
} LinkQueue;/*链队类型*/
void InitQueue(LinkQueue *&lq)/*lq为引用型参数*/
{
lq=(LinkQueue *)malloc(sizeof(LinkQueue));
lq->rear=lq->front=NULL;/*初始情况*/
}
下面的部分函数略
void main()
{
LinkQueue *lq;
ElemType e;
InitQueue(lq);
下面部分略
}

LinkQueue *&lq ,其中lp 是一个指向LinkQueue结构的指针的引用。
你可以把引用理解为一个变量的别名。
所以通过他,你可以改变这个指针,也可以改变这个指针指向的内容。
通常,指针作为参数传递只能改变指针所指的内容,而无法改变这个指针,当你想要改变这个指针本身的值,可以用 这个指针的引用,或者是 指针的指针。 LinkQueue * &lp 在c语言中 你可以认为是 LinkQueue ** lp 的功能翻本,因为c是没有引用的。

你问的问题我是第一次遇见啊

这里是数据结构这门课的特色,这里用的是C伪码,因此在turbo C下面是无法编译通过的,*&表示的引用调用,&是c++里面的调用方式,便于参数调用后值的回传,这里是指针所以不容易理解,如果换成普通int型参数,如果型参是fun(int &a)那么调用他的函数只需用fun(x)就可以调用,而且参数还可以回传,但在普通的C中要用fun(int *a),调用时用fun(&x)这样才能回传,因此这种调用更直观,注意这是C++代码

伪代码,表示在被调函数体内的lq和主调函数体内的lq是同一个变量。