漫谈C指针第四讲---指针与数组

来源:互联网 发布:淘宝二级页面打不开 编辑:程序博客网 时间:2024/06/06 09:59

通过数组名访问数组元素

看下面代码:

int i, a[] = {3,4,5,6,7,3,7,4,4,6};for (i = 0; i <= 9; i++){    printf("%d\n", a[i]);}

很显然,它是显示a 数组的各元素值。

我们还可以这样访问元素,如下:

int i, a[] = {3,4,5,6,7,3,7,4,4,6};for (i = 0; i <= 9; i++){    printf("%d\n", *(a+i));}

它的结果和作用完全一样。

通过指针访问数组元素

int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6};pa = a; /*请注意数组名a直接赋值给指针pa*/for (i = 0; i <= 9; i++){    printf("%d\n", pa[i]);}

很显然,它也是显示a 数组的各元素值。

另外与数组名一样也可如下:

int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6};pa = a;for (i = 0; i <= 9; i++){    printf("%d\n", *(pa+i));}

看pa = a,即数组名赋值给指针,以及通过数组名、指针对元素的访问形式看,它们并没有什么区别,从这里可以看出:数组名其实也就是指针。难道它们没有任何区别?有,请继续。

数组名与指针变量的区别

请看下面的代码:

int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6};pa = a;for (i = 0; i <= 9; i++){    printf("%d\n", *pa);    pa++; /*注意这里,指针值被修改*/}

可以看出,这段代码也是将数组各元素值输出。不过,你把循环体{}中的pa改成a试试。你会发现程序编译出错,不能成功。看来指针和数组名还是不同的。其实上面的指针是指针变量,而数组名只是一个指针常量。这个代码与上面的代码不同的是,指针pa在整个循环中,其值是不断递增的,即指针值被修改了。数组名是指针常量,其值是不能修改的,因此不能类似这样操作:a++

前面pa[i],*(pa+i)处,指针pa的值是使终没有改变。所以变量指针pa与数组名a可以互换。

0 0