【内功篇】指针&数组&字符串(二)
来源:互联网 发布:java截取字符串的函数 编辑:程序博客网 时间:2024/06/07 06:32
这篇呢就来讲一讲数组,为啥上一篇指针还没讲完就开始讲数组啦,其实指针数组字符串这三个东西关系比较大,放在一起可能更能理解它们之间的关系。
数组:
数组这东西说难不难,说简单也不简单,我也不是要做个教程,就不细说了,我就说说我认为比较重要的地方。
我们定义一个数组int a[10];
我们怎么解读它呢,先看int,表示该数组里存的都是int型的数据,再看[10],表示int型的数据存了10个,可以看出它在内存中占了40个字节的空间,然后给个名字a代表数组名。这个a呢是什么,暂时先不说。
我们先看看一组代码:
int a[10];printf("a = %p\n",a);printf("&a = %p\n",&a);printf("&a[0] = %p\n",&a[0]);
打印出来:
再看一组代码:
int a[10] = {1,2};printf("*a = %d\n",*a);printf("*&a = %d\n",*&a);printf("*&a[0] = %d\n",*&a[0]);
打印出来:
两段代码,两个结果,看出来点什么了么。简单来讲,a代表了整个数组,a[0]代表了数组的首元素。那位什么他们的地址是一样的呢?这就要从a的左值右值来说了,a做为右值和&a[0]一样,这时的a表示数组首元素的首地址,那a作为左值呢,a不能作为左值,左值就是“=”左面的值,意味着可以修改,但是数组只能通过数组内元素的修改而达到修改,我们不能访问整个数组,从而对整个数组进行修改。
那么&a呢,有些人认为a表示的是数组的首地址,其实&a才是,
看段代码:
int a[10];printf("a = %p\n",a);printf("&a = %p\n",&a);printf("&a[0] = %p\n",&a[0]);printf("a + 1 = %p\n",a+1);printf("&a + 1 = %p\n",&a+1);printf("&a[0] + 1 = %p\n",&a[0]+1);
打印下结果:
从它们的偏移地址可以看出,a和&a[0]向右偏移一位是4个字节,正好是一个整型的大小,而&a向右偏移一位是40个字节,是一个数组的大小,从这可以看出&a代表数组的首地址了吧。
这篇就说到这啦。
未完待续………………
阅读全文
0 0
- 【内功篇】指针&数组&字符串(二)
- 【内功篇】指针&数组&字符串(一)
- 【内功篇】指针&数组&字符串(三)
- 【内功篇】指针&数组&字符串(四)
- 【内功篇】指针&数组&字符串(五)
- C++基础教程 学习笔记(二) 数组、字符串和指针
- 数组、指针和字符串(二)------C++学习笔记
- 指针与数组(二)——字符串认知
- 指针(二)字符串指针
- 指针、数组、字符串(二)两句话分清数组和指针
- 字符串指针与字符数组区别(二)--字符串输出与指针的相加减
- 二十九、数数组、指针和字符串:指向数组元素的指针和指针数组(左值概念)
- 二十八、数组、指针和字符串:指针的赋值和指针运算(指针常量,常量指针)
- 数组指针与指针数组(二)
- 【内功篇】C语言的输入输出浅析(二)
- 指针复习(二)字符串、数组、函数与指针
- 指针数组(指向字符串)
- C++编程入门系列之二十八(数组、指针和字符串:指针的赋值和指针运算)
- 【SDOI2013 R1 Day1】随机数生成器
- The request filtering module is configured to deny a request where the query string is too long.
- express入门(9)- session
- SSM整合出现这个问题(java.lang.IllegalArgumentException)
- QT那些坑
- 【内功篇】指针&数组&字符串(二)
- imx6 板卡移植官方yocto版本
- 记百度地图定位错误error cod162
- 2017年安卓框架汇总
- pc端转盘抽奖活动(兼容ie7)
- Spring加载resource时classpath*:与classpath:的区别
- mysql的事务管理
- mysql中调整时间日期显示格式
- 一个简单的linux shell判断小程序