在实现栈的时候注意到形参的形式有所不同,在此确认一下这三种形式的形参的区别。
以一个函数简要说明:
#include<iostream>
using namespace std;
struct stack{
int data[10];
}s;
void use_quote(stack &s)
{
s.data[0]=2;
}
void use_direct(stack s)
{
s.data[1]=4;
}
void use_point(stack *s)
{
s->data[2]=6;
}
int main()
{
use_quote(s);
use_direct(s);
use_point(&s);
cout<<s.data[0]<<"==="<<s.data[1]<<"==="<<s.data[2];
getchar();
}
输出结果是2==0==4.
可见,除了stack s这种形式外,其余两种均可以实现对数据进行修改的操作。这一点是意料之中的。
——————————————————————————————————————————————————————————————
而在数组的使用中,函数的形参可以直接写int a[],同时也能对数组元素的值进行修改:
void use_direct(int a[])
{
a[1]=4;
}
我想这是因为对于数组这种结构,把它传递到函数中,本来传递的就是首地址,因此int *a和int a[]这两种方式