指针数组探讨
首先来看普通的数组:
int a[2] = {1,2};
这是强调下a是数组的地址,即a = =&a[0];
下面来看指针数组
char *p[2];
char *p1="aaa";
char *p2="bbb";
char *tmp;
p[0] = p1;
p[1] = p2;
这里p是数组名,所以p是整个数组的地址,即p = &p[0];p+1 = &p[1];
大家可能经常看到tmp = *++p,这样的赋值语句,这样看的话就很简单了tmp = *(&p[1]) = p[1];
这种赋值即tmp的值 = p[1]的值 = "aaa"的地址值。
注意如果直接进行tmp = *++p,会报错,因为数组定义之后,数组名是相当于一个常量指针。所以不能进行修改操作。
这正是数组名和指针的不同之处,指针是变量,数组名是常量。
解决方法是可以通过char **test = p;然后操作test就行了。
这和普通的数组一样,比如我们定义的int a[2];如果执行a++会报错。
但是在
void swap(int a[],int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
这里实际上是传递了一个指针,形参a即使一个int型的指针。