C语言中指针和数组的几种访问形式
2016-08-29 21:07
423 查看
一、关于这几种访问形式,理论不多说,从例子看:
1、数组名
2、指针变量名
3、数组名与指针变量名的区别
上面的结果和1、2的四种结果一样。但是如果把pa换成a,程序编译通不过。为什么呢?
因为pa指针是指针变量,而a是指针常量。对于pa++,pa指针的值是不断增加的,而数组名是指针常量,是不能被修改的。前面的几种情况下,pa始终是不变的,因此可以用数组名a代替指针变量pa。
注意一点:
在上面的例子中,数组的初始化必须是int a[]={0, 1, 2, 3, 4};而不能是int *a={0, 1, 2, 3, 4};后者编译都是警告,运行通不过。
但是换成字符串数组和字符指针却可以,具体原因我还要进一步学习,先看下面的例子
原因等我搞明白了再回来补充。
1、数组名
#include<stdio.h> int main() { int i,a[]={0,1,2,3,4}; for(i=0;i<5;i++) { printf("%d",a[i]); //通过数组名的数组下标形式访问 //printf("%d",*(a+i));//通过数组名的指针形式访问 } }
2、指针变量名
#include<stdio.h> int main() { int i,*pa,a[]={0,1,2,3,4}; pa=a; //注意数组名直接赋值给指针 for(i=0;i<5;i++) { //printf("%d",pa[i]); //通过指针变量名的数组下标形式访问 printf("%d",*(pa+i));//通过指针变量名的指针形式访问 } }从上面的两个例子(四个结论),我们知道结果都是01234。即通过数组名、指针对数组元素的访问是没有什么区别。从这里也可以看出数组名也是指针。难道他们没有任何区别吗?看下面的例子
3、数组名与指针变量名的区别
#include<stdio.h> int main() { int i,*pa,a[]={0,1,2,3,4}; pa=a; for(i=0;i<5;i++) { printf("%d",*pa); pa++; //注意这里,指针值被修改 } }
上面的结果和1、2的四种结果一样。但是如果把pa换成a,程序编译通不过。为什么呢?
因为pa指针是指针变量,而a是指针常量。对于pa++,pa指针的值是不断增加的,而数组名是指针常量,是不能被修改的。前面的几种情况下,pa始终是不变的,因此可以用数组名a代替指针变量pa。
注意一点:
在上面的例子中,数组的初始化必须是int a[]={0, 1, 2, 3, 4};而不能是int *a={0, 1, 2, 3, 4};后者编译都是警告,运行通不过。
但是换成字符串数组和字符指针却可以,具体原因我还要进一步学习,先看下面的例子
#include<stdio.h> int main() { int i; //char a[]="abcd"; char *a="abcd"; char *pa=a; for(i=0;i<=3;i++) { printf("%c",*pa); pa++; } }
原因等我搞明白了再回来补充。
相关文章推荐
- C语言_指针和数组的几种访问形式
- C语言 通过指针访问一维数组的几种方式,通过数组名访问一维数组
- 以指针方式访问数组几种不同形式输出语句解析
- c语言 访问数组首地址的几种方式
- C语言定义数组的几种形式
- C语言定义数组的几种形式
- C语言数组和指针是如何访问的
- C语言定义数组的几种形式
- 95 C语言数组灵活多变的访问形式
- 指针的几种形式(常量指针和指针常量,指针数组和数组指针,指针函数和函数指针,数组和指针)
- C语言定义数组的几种形式
- C语言定义数组的几种形式
- C语言:指针的几种形式
- 7、数组1---(定义、a,&a,&a[0]区别、以指针形式访问和以下标形式访问)(
- C语言定义数组的几种形式
- C语言使用指针访问数组
- C语言定义数组的几种形式
- 用C语言关于学生管理系统的几种实现方法(一位数组,二维数组,指针,结构体)
- 以指针的形式和以下标的形式访问指针?以指针的形式和以下标的形式访问数组?
- C语言:通过返回指针的形式找出数组的最大值和最小值