一个C的小问题 10

来源:百度知道 编辑:UC知道 时间:2024/09/25 00:42:24
在C或C++里,*和&到底什么时候该用,什么时候不该用,或者用那个,哪位大侠能举几个很好的例子教教菜鸟我。。。。。。。。。
struct Stack
{
ElemType stack[StackMaxSize];
int top;
};
void InitStack(Stack&S)
{
S.top=-1;
}
中的&没有行不?这&是引用对吗?

*是解引用的意思,&是取地址的意思。两个通常用在指针上。比如定义
int *a;定义了一个整型的指针a(注意这个时候*是指指针类型,这是操作符重载,*也可以表示乘法),那么这个时候a是一个指针,具体a指向哪里还不知。我们可以为它指向一个值。比如 int b;申请一个整型变量。那么b是一个整型变量,它存在内存中,那么取它的地址就是用&b了。那么我们可以为a赋值了,a=&b;这样a指针就指向了b变量的内存地址,那这个时候不能直接用a来表示b的值,这个时候要用到解引用*,所以这个时候要访问a指针指向的数据值就是用*a;完整定义如下:
int *a;
int b;
b=3;
a=&b;
cout<<*a<<endl; (这个时候输出来的就是b的值,如果你用cout<<a<<endl;那么将输出一个内存地址值)。

再说明一下,运用这个理论,按上面的定义,那么&a,又是什么意思呢?你能知道吗,答案是取存放a指针的内存地址。
那么定义一个int **c;那这个又是什么意思,意思是定义一个指向指针的指针c;如果c=&a; 那么要输出b的值,也可以用cout<<**c<<endl;意思是解了两重指针,你不妨去试一试,不明白的再发短信与我。

问题补充:struct Stack
{
ElemType stack[StackMaxSize];
int top;
};
void InitStack(Stack&S)
{
S.top=-1;
}
中的&没有行不?这&是引用对吗?
答:没有&是不行的,这个&是引用,没有这个&,函数只是把传过来的复制一个副本,所以下面对副本的操作不能影响到原数据,就起不到初始化对象的作用。

*是定义指针的时候用,&是取所定义的数据的地址.