指针与数组名

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 已经没有不同。这更说明了数组名就是常量指针 

上一篇:Peaceful Rooks CodeForces - 1411C


下一篇:STL multiset使用说明与代码演示