数组的初始化问题
2016-04-26 19:07
162 查看
http://blog.csdn.net/caryaliu/article/details/8753269
一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
调试的时查看内存发现不是那么一回事,翻了一下《The C++ Programming Language》总算有定论。PDF的竟然不然复制,就把它这章翻译了,如下
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndica<br/>4000<br/>tors/InBlock.gif)
数组初始化
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
数组可以用一个列值来初始化,例如
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
int v1[] ={1,2,3,4};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
char v2[]={'a','b','c',0};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。所以v1和v2分别为 int[4] 和char[4]类型。如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误。例如:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
char v3[2] ={'a','b',0}; //错误:太多的初始化值了
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
char v3[3] ={'a','b',0}; //正确
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
如果初始化时指定的的元素个数比数组大小少,剩下的元素都回被初始化为 0。例如
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
int v5[8]={1,2,3,4};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
等价于
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
int v5[8]={1,2,3,4,0,0,0,0};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
注意没有如下形式的数组赋值:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
void f()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
v4={'c','d',0}; //错误:不是数组赋值
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
如果你想这样的复制的话,请使用 vector(16章第三节) 或者 valarray(22章第四节)。
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
字符数组可以方便地采用字符串直接初始化(参考第五章 2.2小节)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
译注: 就是 这样啦 char alpha []="abcdefghijklmn";
一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
调试的时查看内存发现不是那么一回事,翻了一下《The C++ Programming Language》总算有定论。PDF的竟然不然复制,就把它这章翻译了,如下
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndica<br/>4000<br/>tors/InBlock.gif)
数组初始化
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
数组可以用一个列值来初始化,例如
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
int v1[] ={1,2,3,4};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
char v2[]={'a','b','c',0};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。所以v1和v2分别为 int[4] 和char[4]类型。如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误。例如:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
char v3[2] ={'a','b',0}; //错误:太多的初始化值了
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
char v3[3] ={'a','b',0}; //正确
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
如果初始化时指定的的元素个数比数组大小少,剩下的元素都回被初始化为 0。例如
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
int v5[8]={1,2,3,4};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
等价于
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
int v5[8]={1,2,3,4,0,0,0,0};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
注意没有如下形式的数组赋值:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
void f()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
v4={'c','d',0}; //错误:不是数组赋值
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
如果你想这样的复制的话,请使用 vector(16章第三节) 或者 valarray(22章第四节)。
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
字符数组可以方便地采用字符串直接初始化(参考第五章 2.2小节)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
译注: 就是 这样啦 char alpha []="abcdefghijklmn";
相关文章推荐
- springmvc restful put delete Ajax 请求参数取不到-已解决
- java编程中'为了性能'一些尽量做到的地方
- [省选] [线段树] [BZOJ1012] JSOI2008 最大值 (max)
- 移动端 顶部、底部和内容之间的小技巧 用flex布局来解决
- iOS -UITableView-FDTemplateLayoutCell 的使用
- cf655A Buses Between Cities
- 内存泄漏与内存溢出(简单总结)
- Android bind service讲解以及跨进程通信
- hdu 4707 Pet【带权并查集】
- Android开发艺术探索——第四章View的工作原理
- PAT-B 1001. 害死人不偿命的(3n+1)猜想
- hdu-3943[数位dp(记忆化搜索)+二分]
- 实践--天气预报应用实例
- 利用Charles抓https包
- initcall在内核中的调用顺序
- 处理ViewPager循环滑动问题(一)
- SQL循环遍历,删除表里某一列是重复的数据,只保留一条。
- 构建之法阅读笔记05
- JS数据结构与算法--字典
- 进程同步---生产者与消费者问题以及进程同步机制--信号量及P、V操作