1. 通过数组名访问数字元素
代码一
//代码3.1
#include <stdio.h>
int main()
{
int i, a[] = {3,4,5,6,7,3,7,4,4,6};
for (i = 0; i <= 9; i++)
{
printf("%d\n", a[i]);
}
}
代码二
//代码3.2
#include <stdio.h>
int main()
{
int i, a[] = {3,4,5,6,7,3,7,4,4,6};
for (i = 0; i <= 9; i++)
{
printf("%d\n", *(a+i));
}
}
2.通过指针访问数组元素
//代码3.3
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));
}
3.数组名与指针的区别
我们看几行C++代码
//代码3.4
#include <iostream>
int main()
{
using namespace std;
int i,*pa;
int a[] = {1,2,3,4,5,6,7,8,9};
pa = a;
for (i = 0; i < 9; i++)
{
cout << (*pa) << endl;
pa++; /*注意这里,指针值被修改*/
}
}
这段代码成功运行,输出了1-9;当我们把第12行的pa改成a时,编译出现了错误
可以看出, 指针和数组名还是不同的。 其实上面的指针是指针变量,而数组名只是一个指针常量。这个代码与上面的代 码不同的是,指针 pa 在整个循环中,其值是不断递增的,即指针值被修改了。 数组名是指针常量,其值是不能修改的,因此不能类似这样操作:a++。
4.声明一个指针变量
我们在代码3.4中做一些小改变
//代码3.5
#include <iostream>
int main()
{
using namespace std;
int i,*const pa;
int a[] = {1,2,3,4,5,6,7,8,9};
pa = a;
for (i = 0; i < 9; i++)
{
cout << (*pa) << endl;
pa++; /*注意这里,指针值被修改*/
}
}
编译出现了错误,如下图所示
因为 pa 指针被定义为常量指针了。这 时与数组名 a 已经没有不同。这更说明了数组名就是常量指针