一维数组(数组指针初探)
来源:互联网 发布:最喜欢的一句话知乎 编辑:程序博客网 时间:2024/05/22 17:40
本节主要讲一维数组,期间会提及数组指针,为后续学习铺垫。
数组首元素地址与数组地址的关系
先看下面一个例子
int main(){ int i = 0; int a[10] = {1,2}; //其他初始化为 int b[10]; //a = b; printf("a:%d, a+1:%d, &a:%d, &a+1:%d",a, a+1, &a, &a+1); getchar(); return 0;}输出结果如下:
分析
a是数组名,它表示数组首元素地址;&a表示数组地址;
数组首元素地址虽然在数值上等于数组地址,但他们是两个不同的概念;
从输出结果可以看出:a+1比a多4个字节;&a+1比&a多40个字节,这40个字节正好是数组a的长度。
结论:数据类型不一样。
一维数组的数据类型是什么
问题:怎样表达int a[10]这种数据类型?
数据类型分为基础、非基础,对于非基础数据类型,思考角度应该发生变化。
C语言中的数组有自己特定的类型
例:int array[5] 的类型为int[5]
数组类型:
typedef int(MYINT5)[5];
typedef int(MYFLOAT10)[10];
数组定义:
MYINT5 iArray;
MYFLOAT10 fArray;
看下面一个例子
int main(){ typedef char(MYCHAR)[10]; MYCHAR cArray; //相当于char cArray[10]; MYCHAR *cArrayP = NULL; //其实这是数组指针,这在后面会讲到。 cArray[0] = 'a'; cArray[1] = 'b'; cArrayP = &cArray; printf("%c",**cArrayP); printf("%c",*(*cArrayP+1)); //为了研究指针cArrayP的指向问题,以及它与数组cArray的关系,而做出了如下分析。 printf("\n"); printf(" cArrayP :%d\n",cArrayP); printf(" *cArrayP :%d\n",*cArrayP); printf(" cArray :%d\n",cArray); printf("*(&cArray) :%d\n",*(&cArray)); printf(" cArrayP+1:%d\n",cArrayP+1); printf(" cArray+9 :%d\n",cArray+9); getchar(); return 0;}说明:这里cArrayP是一个数组指针,这个在后面会专门说到。
输出结果如下:
分析(me)
画出栈区内存模型如下所示:
1. 前面已经讨论过了cArray是数组首元素地址,&cArray是数组地址,虽然他们在数值上是相等的,但他们是两个完全不同的概念。
2. 将数组cArray看成一个整体,它是一个变量,把这个变量的地址赋给cArrayP,*cArrayP自然就取得了这个变量,即cArray。
3. cArray是数组首元素地址,*cArray即取得了数组首元素值。又由于cArray等价于*cArrayP,所以**cArrayP也就取得了数组首元素值。
4. cArray+1是数组第二个元素的地址,*(cArray+1)即取得了该元素的值。同理,*cArrayP+1也是数组第二个元素的地址,于是*(*cArrayP+1)就取得了该元素的值。
5. 另外,指针cArrayP指向的数据类型是MYCHAR类型,它是一个拥有10个字节长度的字符数组,因而cArrayP+1自然也就指向下一个这样的数据类型,所以cArrayP+1的数值比cArrayP大10个字节长度。换句话说,就是cArrayP的步长是10。
结论:
数组类型:主要是为了解决指针的步长。int [][10] //4*10
- 一维数组(数组指针初探)
- c语言指针初探 一 指针与数组
- 一维指针数组
- 指针数组和数组指针(一)
- 一维数组和数组指针
- 数组指针操作一维二维数组
- 指针和数组关系初探
- 一维数组和指针
- 一维数组与指针
- 指针操作一维数组
- 一维数组与指针
- 一维数组与指针
- 数组与指针(一)
- 数组与指针(一)
- 数组和指针(一)
- 171104—数组开张【一维数组&指针数组】
- 一维数组指针二维数组指针分析
- 二维数组指针和一维数组指针的区别
- android shader类简介 渲染图像示例
- 从毕业到工作感觉就是一瞬间
- JavaScript学习 猜数字小游戏带你学习for循环,变量,方法的定义
- 最小生成树 - kruskal 小讲 【 理解 + 例题 】
- hdu-1234-开门人和关门人
- 一维数组(数组指针初探)
- nyoj236心急的c小加
- input子系统和按键
- http://blog.csdn.net/ydpiaoyun/article/details/6655832
- ubuntu 14.04 一键安装 gitlab7
- cocos2dx 3.2 + vs2012 + cocostudio开发笔记
- 2014 Multi-University Training Contest 5 1010 Matrix multiplication 涨姿势系列
- java 线程的创建与启动
- ufldl学习笔记与编程作业:Debugging: Gradient Checking(梯度检测)