C语言中指针和数组的几种访问形式

た 入场券 2022-07-17 03:27 269阅读 0赞

一、关于这几种访问形式,理论不多说,从例子看:

1、数组名

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i,a[]={0,1,2,3,4};
  5. for(i=0;i<5;i++)
  6. {
  7. printf("%d",a[i]); //通过数组名的数组下标形式访问
  8. //printf("%d",*(a+i));//通过数组名的指针形式访问
  9. }
  10. }

2、指针变量名

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i,*pa,a[]={0,1,2,3,4};
  5. pa=a; //注意数组名直接赋值给指针
  6. for(i=0;i<5;i++)
  7. {
  8. //printf("%d",pa[i]); //通过指针变量名的数组下标形式访问
  9. printf("%d",*(pa+i));//通过指针变量名的指针形式访问
  10. }
  11. }

从上面的两个例子(四个结论),我们知道结果都是01234。即通过数组名、指针对数组元素的访问是没有什么区别。从这里也可以看出数组名也是指针。难道他们没有任何区别吗?看下面的例子

3、数组名与指针变量名的区别

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i,*pa,a[]={0,1,2,3,4};
  5. pa=a;
  6. for(i=0;i<5;i++)
  7. {
  8. printf("%d",*pa);
  9. pa++; //注意这里,指针值被修改
  10. }
  11. }

上面的结果和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>
  2. int main()
  3. {
  4. int i;
  5. //char a[]="abcd";
  6. char *a="abcd";
  7. char *pa=a;
  8. for(i=0;i<=3;i++)
  9. {
  10. printf("%c",*pa);
  11. pa++;
  12. }
  13. }

原因等我搞明白了再回来补充。

发表评论

表情:
评论列表 (有 0 条评论,269人围观)

还没有评论,来说两句吧...

相关阅读

    相关 指针和数区别

    指针和数组的区别: 1.空间分配:数组是静态分配,且分配的空间是连续的;指针是动态分配,分配的空间不一定是连续的。 2.安全性:使用数组可能会造成数组越界;指针使用时可能会