C语言数组与指针、数组的定义方式


前言

楼主大一的时候学过一点C语言,但是之后一直没有用,最近用到了发现有很多不会的地方,所以开一篇博客记录学习的过程。

一、数组与指针的关系

         C语言支持数组的数据结构,它是存储固定大小的相同类型元素的集合。 

         声明数组,需要指定元素的类型和数量。如下所示:

//type arrayName [arraySize],声明一个int类型、包含10个元素的数组
int p[10];

        现在p是一个可用数组,里面可以容纳10个int类型的数据。p[0]表示其中的第一个元素

         而数组名,也就是这里的p,是一个指向数组里第一个元素的指针。也就是 p 的值是数组p中的第一个元素的地址。

二、C中的指针

           每一个变量都有一个内存位置,用&运算符可以访问地址。

          什么是指针呢?指针是一个用来存放内存地址的变量(也有常量指针)。它就像其他变量或者常量一样,只不过它存储的是地址值,如下所示。

int a = 10;
int *p = &a;

         指针的值是地址,但是它也可以表示地址所指向的值。比如这里 p的值为a的地址,*p可以表示这个地址指向的值,即10。

int a = 10;
int *p = &a;
printf("a的地址为%p\n",p);
printf("a的值为%d\n",*p);

如何定义指针呢?

           指针变量声明的一般形式为

//type *var_name
int *ip; //一个整型的指针,也就是ip指向的是整型量
doubel *dp; //一个double 型的指针
float *fp; //一个浮点型的指针

注意,这里的type是指针指向的量的类型,例如ip为一个整型数据的地址,但是指针本身的值的类型都是一样的,都是一个代表地址的长的十六进制数。

 三.如何用指针表示数组:

         如第一部分所说,数组名其实是指向数组中第一个元素的指针,也就是可以把数组名作为一个常量指针(两者并不完全等价)。

          关于什么是常量指针以及指针常量:

          常量指针:落脚点是指针,这是一个指针,只不过是常量的指针即:指向的是一个常量。(指针本身可以是变量)。如下例所示。

const int *p = &a;

  这里p是一个指针变量(可以再次被赋值),指向常量a。

          指针常量:落脚点是常量,说明这是一个指针类型的常量。如下例所示:

int *const p = &a;//定义一个指针常量

这里p是一个常量,它的值是a的地址,p它不可以被再次赋值。

       如何用指针表示数组呢?

         例如这里声明一个数组 bear ,下面的bear是一个指向bear[0]的指针,也就是bear相当于一个常量指针,存的是bear[0]的地址。

int bear[2];

         知道bear相当于一个指针类型的量,所以这里可以将bear赋值给指针。现在可以用var_bear来访问数组了。例如*(var_bear)指向的是bear[0],*(var_bear+1)指向的是bear[1];

 

          提一下,var_bear+1,实际上它的值是加了4,这是因为int类型占4个字节。

        


总结

指针变量存的是地址值,数组名可以看作常量指针。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值