为什么c语言第一个数组元素要从a[0]开始数起,不从a[1]数起呢?
2016-12-31 19:32
330 查看
大一学习c语言刚接触数组时候,书上说第一个数组元素要从下标0开始数起,不能从1开始数,当时并没有探究为什么是这样的。比如 int a[4]={1,2,3,4};那么a[0]=1;为什么不从1数起呢,即a{1}=1呢?不更符合大家的生活习惯吗?
原来数组括号里面的数字叫做偏移量,学过微机原理的应该都学过。int a[4];那么计算机就会在内存中随机分配一个首地址,在这首地址后面连续的分配16个字节,每个数组元素占用4个字节,那么得到
第一个数组元素a[0]起始地址:首地址+偏移地址0*4字节;
第二个数组元素a[1]起始地址:首地址+偏移地址1*4字节;
第三个数组元素a[2]起始地址:首地址+偏移地址2*4字节;
第四个数组元素a[3]起始地址:首地址+偏移地址3*4字节;
如果数组从1开始数起。那么得
第一个数组元素a[1]起始地址:首地址+(1-1)*4字节;
第二个数组元素a[2]起始地址:首地址+(2-1)*4字节;
第三个数组元素a[3]起始地址:首地址+(3-1)*4字节;
第四个数组元素a[4]起始地址:首地址+(4-1)*4字节;
可以看出如果从1开始的话,总要多一步减法运算,所以从0开始体现了C语言高效的特点!!!
第一次写博客,写的不是很好,不过我会继续努力的,希望大家多多支持我,给我提出宝贵的意见,大家一起努力进步!
之前在本科时候主要搞的是电机,现在研究生了导师的方向是智能算法,自己对编程也很感兴趣,现在重新捡起编程语言来学习,个人觉得如果想做一件事情,什么时候做都不会太晚,以后会一点一点的回顾C语言和C++的知识!!!
在后面博客中我会总结c语言,加油!!!
原来数组括号里面的数字叫做偏移量,学过微机原理的应该都学过。int a[4];那么计算机就会在内存中随机分配一个首地址,在这首地址后面连续的分配16个字节,每个数组元素占用4个字节,那么得到
第一个数组元素a[0]起始地址:首地址+偏移地址0*4字节;
第二个数组元素a[1]起始地址:首地址+偏移地址1*4字节;
第三个数组元素a[2]起始地址:首地址+偏移地址2*4字节;
第四个数组元素a[3]起始地址:首地址+偏移地址3*4字节;
如果数组从1开始数起。那么得
第一个数组元素a[1]起始地址:首地址+(1-1)*4字节;
第二个数组元素a[2]起始地址:首地址+(2-1)*4字节;
第三个数组元素a[3]起始地址:首地址+(3-1)*4字节;
第四个数组元素a[4]起始地址:首地址+(4-1)*4字节;
可以看出如果从1开始的话,总要多一步减法运算,所以从0开始体现了C语言高效的特点!!!
第一次写博客,写的不是很好,不过我会继续努力的,希望大家多多支持我,给我提出宝贵的意见,大家一起努力进步!
之前在本科时候主要搞的是电机,现在研究生了导师的方向是智能算法,自己对编程也很感兴趣,现在重新捡起编程语言来学习,个人觉得如果想做一件事情,什么时候做都不会太晚,以后会一点一点的回顾C语言和C++的知识!!!
在后面博客中我会总结c语言,加油!!!
相关文章推荐
- C语言数组元素下标为何从0开始
- C语言中,为什么指针表达式的值+1.对应的地址值却+4?/为什么两个数组元素的地址相减之差不为地址之差?
- 2级C语言可能没过,数据结构必须开始,第一个目标手写程序突破100行
- C语言必会面试题(3、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)
- 为什么C语言中的的数组是从0开始的?
- 《开源框架那点事儿18》:为什么从开始的第一个测试写入和文档?
- 为什么c语言从main函数开始
- c语言中float为什么不能直接用==与0比较
- C语言数组元素的查询
- C语言中判断字符串str1是否以str2开始或结束
- 为什么说《Pokémon GO》是史上第一个真正意义上的“全民”游戏?
- 开始学习C语言了
- 为什么要学习C语言
- 刘未鹏:为什么你从现在开始就应该写博客
- 转:C语言中的printf用%d输出float类型数据出现或以%f输出int型数据的结果为什么是0
- 为什么复合索引第一个字段如此重要
- C语言指针访问数组元素
- c语言多级指针用malloc申请内存,释放报错,为什么会这样捏???????
- 第一个C语言代码
- [BetterExplained]为什么你应该(从现在开始就)写博客 (转自http://mindhacks.cn/)