作者在 2008-09-13 11:05:34 发布以下内容
我们知道声明 int a=1;可以做a++这样的操作,在这个过程中,a是不断变化的。指针同样也可以,因为指针是一个变量。但是如果是数组名就不可以了,因为数组名是一个常量。
例如:
int a=1;
a++;
这是正确的;
int *p=&a;
cout<<*(p++)<<endl;
这也是正确的;但是
int a[10];
cout<<*(a++)<<endl;
这是错误的,因为数组名a在不断的变化,但他是一个常量。但是可以改为:
int a[10];
int i;
for(i=0;i<10;i++)
cout<<*(a+i)<<endl;
我们再来看一个例子。
#include<iostream.h>
const int N=6;
void print(const int *p,int n);
void main()
{
int array[N];
for(int i=0;i<N;i++)
cin>>array[i];
print(array,N);
}
void print(const int *p,int n)
{
cout<<"{"<<*p;
for(int i=1;i<n;i++)
cout<<"."<<*(p+i);
cout<<"}"<<endl;
}
在主函数调用print(array,N)时,将数组名array传递给常量指针p。大家不要误认为P是数组名,array赋值给p而将p的值改变,其实在计算机处理的时候就把p看成是指针。