聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长

漫谈C指针:指针与数组

2012-10-18 00:00 浏览: 1557556 次 我要评论(0 条) 字号:


通过数组名访问数组元素

看下面代码:


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

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

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


int i, a[] = {3,4,5,6,7,3,7,4,4,6};
for (i = 0; i <= 9; i++)
{
printf("%dn", *(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("%dn", 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("%dn", *(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("%dn", *pa);
pa++; /*注意这里,指针值被修改*/
}

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

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



网友评论已有0条评论, 我也要评论

发表评论

*

* (保密)

Ctrl+Enter 快捷回复