指针与数组

C语言中经常会用到这两个东西,指针,数组。下面我从值,内存分配,访问形式这几个方面来分析一下这两个区别。


值及内存分配。


指针时一个变量,在32位系统下,它的大小永远是4个byte,指针的值是地址,它通过保存指针所指向对象的首地址来访问这个对象。

例如:

 

#include<stdio.h>
int main()
 {
   int a=1;
   int *p=&a;
   printf("%d",*p);
   return 0;
 }


这里有三个概念:*p,p,&p;(一定要分清楚这三个概念,不然在以后学习中会遇到许多困难)

   *p------->指针所向对象的值;(a)

    p-------->指针所指向对象的首地址;(&a)

  &p--------->指针本身的地址;(&p)


数组,你可以把它想象成学校澡堂的储物柜,每一个柜子都有自己的编号,你可通过编号来找到任何一个柜子。数组下标的道理与这个相同,不过数组下标是从0开始。


数组的大小与它所存储元素的类型,个数有关。定义数组时必须指明它的元素类型和元素个数。定义好之后,它的大小是不能修改的。


数组可以存储任何类型的数组,不包括函数。


#include<stdio.h>
int main()
 {
   int a[3]={1,2,3};
   int a[]="abcd";
   return 0;
 }



这里要记住,数组名就是数组首地址,请自行查阅 &a与a的区别。


访问形式


下面这部分内容可能比较难懂,指针可以以下标的形式访问指针的元素,,数组也可以用指针的形式访问数组的元素。


读下面函数:

                 

                          
                        #include<stdio.h>
                            int main()
                              {
                                      char *p="abcdef";
                                      char arr[]="abcdef";
                                      printf("%c\n",*(p+1));
                                      printf("%c\n",p[1]);
                                      printf("%c\n",arr[1]);
                                      printf("%c\n",*(arr+1));
                                      return 0;
                             }


 

当你执行这个程序的时候,会发现运行框里会输出4个b。




                                                     


                                             



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值