一维数组的初始化问题
2014-05-06 11:46
337 查看
参考了:
http://bbs.csdn.net/topics/310136813
http://blog.csdn.net/sibylle/article/details/2026915
个人新博客,欢迎关注:http://readus.org
一. 数组可以用一个初始列表值来初始化,如下所示:
[cpp] view plaincopyprint?
int array1[] = {1, 5, 8, 9};
char array2[] = {'a', 'c', 'f', 'd', 'a'};
1. 当数组定义时没有指定大小,初始化时使用列表值来初始化了,如上所示,则数组大小由初始化时列表元素个数决定,所以array1大小为4,array2大小为5;
2. 如果明确指定了大小,在初始化时,列表的元素个数超过了已指定的大小则会产生错误,如:
[cpp] view plaincopyprint?
char array[2] ={'a','b',0}; //错误:太多的初始化值了
char array[3] ={'a','b',0}; //正确
3. 如果初始化时指定的列表元素个数比数组大小少,则剩下的元素都会被初始化为0;如
[cpp] view plaincopyprint?
int array[8]={1,2,3,4};
等价于
int array[8]={1,2,3,4,0,0,0,0};
4. 字符数组可以方便的用字符串进行初始化,例如:
[cpp] view plaincopyprint?
char string[] = "abcdefghijklmn";
二. 使用memset初始化数组
先看看memset的函数说明:
[plain] view plaincopyprint?
MEMSET(3) BSD Library Functions Manual MEMSET(3)
NAME
memset -- fill a byte string with a byte value
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <string.h>
void *
memset(void *b, int c, size_t len);
DESCRIPTION
The memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b.
RETURN VALUES
The memset() function returns its first argument.
SEE ALSO
bzero(3), memset_pattern(3), swab(3), wmemset(3)
STANDARDS
The memset() function conforms to ISO/IEC 9899:1990 (``ISO C90'').
memset通常用来对一段内存空间全部设置为某个字符,一般情况下用于对定义的字符串进行初始化为 ' ' 或者 ’\0';例如
[html] view plaincopyprint?
char array[100];
memset(array, '\0', sizeof(array));
也可这样初始化一个整型数组为0:
[cpp] view plaincopyprint?
int array[10];
memset(array, 0, sizeof(array));
但是,看下面的例子:
[cpp] view plaincopyprint?
int array[10];
memset(array, 1, sizeof(array));
是否array中所有的值都为1呢?
答案:不为1,而都是16843009,这是为何呢?
从上面的memset函数说明可以看出,memset的初始化是按字节进行的,在进行memset(array, 1, sizeof(array));调用时,就是对array执行的sizeof(array)个字节进行赋值,每个字节都用ASCII为1的字符去填充,转为二进制后,1就是 00000001,占一个字节,一个 int 类型占4个字节,合起来就是 1 00000001 00000001 00000001,即16843009.就完成了对一个int类型的赋值,所以上面数组中的值都为16843009.
三. 用循环初始化数组
例如:
[cpp] view plaincopyprint?
int array[10];
for(int i = 0; i < 10; ++ i)
array[i] = 0;
这个肯定成功。
http://bbs.csdn.net/topics/310136813
http://blog.csdn.net/sibylle/article/details/2026915
个人新博客,欢迎关注:http://readus.org
一. 数组可以用一个初始列表值来初始化,如下所示:
[cpp] view plaincopyprint?
int array1[] = {1, 5, 8, 9};
char array2[] = {'a', 'c', 'f', 'd', 'a'};
int array1[] = {1, 5, 8, 9}; char array2[] = {'a', 'c', 'f', 'd', 'a'};
1. 当数组定义时没有指定大小,初始化时使用列表值来初始化了,如上所示,则数组大小由初始化时列表元素个数决定,所以array1大小为4,array2大小为5;
2. 如果明确指定了大小,在初始化时,列表的元素个数超过了已指定的大小则会产生错误,如:
[cpp] view plaincopyprint?
char array[2] ={'a','b',0}; //错误:太多的初始化值了
char array[3] ={'a','b',0}; //正确
char array[2] ={'a','b',0}; //错误:太多的初始化值了 char array[3] ={'a','b',0}; //正确
3. 如果初始化时指定的列表元素个数比数组大小少,则剩下的元素都会被初始化为0;如
[cpp] view plaincopyprint?
int array[8]={1,2,3,4};
等价于
int array[8]={1,2,3,4,0,0,0,0};
int array[8]={1,2,3,4}; 等价于 int array[8]={1,2,3,4,0,0,0,0};
4. 字符数组可以方便的用字符串进行初始化,例如:
[cpp] view plaincopyprint?
char string[] = "abcdefghijklmn";
char string[] = "abcdefghijklmn";
二. 使用memset初始化数组
先看看memset的函数说明:
[plain] view plaincopyprint?
MEMSET(3) BSD Library Functions Manual MEMSET(3)
NAME
memset -- fill a byte string with a byte value
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <string.h>
void *
memset(void *b, int c, size_t len);
DESCRIPTION
The memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b.
RETURN VALUES
The memset() function returns its first argument.
SEE ALSO
bzero(3), memset_pattern(3), swab(3), wmemset(3)
STANDARDS
The memset() function conforms to ISO/IEC 9899:1990 (``ISO C90'').
MEMSET(3) BSD Library Functions Manual MEMSET(3) NAME memset -- fill a byte string with a byte value LIBRARY Standard C Library (libc, -lc) SYNOPSIS #include <string.h> void * memset(void *b, int c, size_t len); DESCRIPTION The memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b. RETURN VALUES The memset() function returns its first argument. SEE ALSO bzero(3), memset_pattern(3), swab(3), wmemset(3) STANDARDS The memset() function conforms to ISO/IEC 9899:1990 (``ISO C90'').
memset通常用来对一段内存空间全部设置为某个字符,一般情况下用于对定义的字符串进行初始化为 ' ' 或者 ’\0';例如
[html] view plaincopyprint?
char array[100];
memset(array, '\0', sizeof(array));
char array[100]; memset(array, '\0', sizeof(array));
也可这样初始化一个整型数组为0:
[cpp] view plaincopyprint?
int array[10];
memset(array, 0, sizeof(array));
int array[10]; memset(array, 0, sizeof(array));
但是,看下面的例子:
[cpp] view plaincopyprint?
int array[10];
memset(array, 1, sizeof(array));
int array[10]; memset(array, 1, sizeof(array));
是否array中所有的值都为1呢?
答案:不为1,而都是16843009,这是为何呢?
从上面的memset函数说明可以看出,memset的初始化是按字节进行的,在进行memset(array, 1, sizeof(array));调用时,就是对array执行的sizeof(array)个字节进行赋值,每个字节都用ASCII为1的字符去填充,转为二进制后,1就是 00000001,占一个字节,一个 int 类型占4个字节,合起来就是 1 00000001 00000001 00000001,即16843009.就完成了对一个int类型的赋值,所以上面数组中的值都为16843009.
三. 用循环初始化数组
例如:
[cpp] view plaincopyprint?
int array[10];
for(int i = 0; i < 10; ++ i)
array[i] = 0;
int array[10]; for(int i = 0; i < 10; ++ i) array[i] = 0;
这个肯定成功。
相关文章推荐
- 一维数组的初始化问题(函数体内与函数体外)
- 《C++笔记》 Part7 一维数组与二维数组的初始化问题(vector)
- 一维数组的初始化问题
- [笔试题 6][c/c++]一维数组初始化问题
- 一维数组的初始化问题
- N皇后问题---回溯法之一维数组存储
- 一维数组声明初始化,求最值 和 平均值
- 一维数组的相关问题
- 数组与指针初始化问题
- 字符串数组初始化相关问题总结
- c语言中字符串常见初始化时的问题,以及字符串数组与指针区别的分析
- 一维数组声明、创建、初始化
- C# 字节数组初始化后转换为字符串的问题
- 字符串数组初始化相关问题总结
- VC++下一个看似简单实则很有“内涵”的C/C++字符数组初始化问题
- 尚硅谷第四课0722班 java-特殊流程控制 -数组元素的默认初始化-数组操作常见问题-Java内存的结构
- 体验结对开发的乐趣(4)--(首尾相连的一维数组求最大子数组和的问题)
- php排序问题(一维数组排序和二维数组排序)
- 数组问题之一维最大字段和问题<Java实现>
- c++字符数组未初始化及初始化后元素内容及其'\0'问题解析