C/C++语言的指针问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 22:29:00
指针运算符“&”和“*”到底怎么用?

拿个下面的例子吧:
Status InitStack (SqStack &S)
{
S.base=(SElemType *)malloc(100*(sizeof(SElemType)));
S.top=S.base;
S.StackSize=STACK_INIT_SIZE;
return OK;
}

Status InitStack(SqStack *S)
{
(*S).base=(SElemType *)malloc(100*sizeof(SElemType));
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return OK;
}
目前在学数据结构的“栈”,以上两个代吗都是实现初始化栈的功用,但是对于“&”和"*"很迷惑,谁能解释一下,他们在语句中到底是什么作用,两个各挑一条语句来解释一下,就好了,就给你加分。

&是取址符。用法:

scanf("%d",&a);这个是最常见的,不多解释。
然后就是函数调用的时候,有时候会出现这样的情况:
void a123()
{
int a = 5;
b123 ( &a );
...
}

void b123(int *p )
{
...
}

这样是让指针p指向a所在的地址。

同时引出'*',这个符号是指针前的符号,上面的例子中的int *p;
就是说建立指针p,p指向的地址存放的数据是int型的。用法可以是。
*p=a;但是不能是p=a;原因是运算后相当于是p中保存的地址的值为a的值,这样运行p的时候就会找到“名称”为2的地址,这样是错误的。