二维字符数组,例如char a[m][n]怎么一次性全部初始化为同一个字符

nokianasty 2009-08-21 04:32:43
关于二维字符数组的初始化,真是有点头晕晕的

char a[m][n]={0};是不是就把n*m个元素都给初始化为0了呢?
如果这样:char a[m][n]={'a'};字符a后面的元素 都变成了0,还是‘\0’?
要是我想把char a[m][n];全部的字符都给初始化为字母a,用什么格式?(我试过了,这样是不行的:char a[m][n]={'a'};这只是把第一个给置a,而已)
如果把每一个元素都给初始化为'\0'又怎样才行?
我真想请问下,有没有什么简洁的格式。难道非得用那个循环,一个个元素来赋值吗?




请大家 发表发表高见 小弟 在此不胜感激

...全文
1491 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveour 2009-08-21
  • 打赏
  • 举报
回复
显式初始化数组的时候位数如果大于列出的元素初值个数,像LZ的“char a[m][n]={0};”,那么只初始化前面的数组元素,剩下的如果是内置类型就初始化为0(如果是类类型调用类默认构造函数),所以,“char a[m][n]={0};是不是就把n*m个元素都给初始化为0了呢? ”,是,但是不是用后面给的0去初始化了整个数组,只是恰好后面的也是初始化为0。

ysysbaobei 2009-08-21
  • 打赏
  • 举报
回复
顶下
sunkehappy 2009-08-21
  • 打赏
  • 举报
回复
六楼的回答也很棒啊!
zhongchengli 2009-08-21
  • 打赏
  • 举报
回复
char a[m][n]={0};是不是就把n*m个元素都给初始化为0了呢?
-->在vs2008上面做了试验,都变为0
如果这样:char a[m][n]={'a'};字符a后面的元素 都变成了0,还是‘\0’?
-->在vs2008上面做了试验,第一个元素是a,其他的都是0
上面的工作都是编译器做的,可能不同的编译器效果也不一样。

要是我想把char a[m][n];全部的字符都给初始化为字母a,用什么格式
-->memset( a, 'a', m*n*sizeof(char) );
如果把每一个元素都给初始化为'\0'又怎样才行?
-->memset( a, 0, m*n*sizeof(char) );
飞天御剑流 2009-08-21
  • 打赏
  • 举报
回复
char a[m][n]={0};是不是就把n*m个元素都给初始化为0了呢?
----------------------------------------------------



如果这样:char a[m][n]={'a'};字符a后面的元素 都变成了0,还是‘\0’?
---------------------------------------------------------------
'\0'的意思是ASCII码值为0的那个字符,其内存映像跟数值0是一样的,字符a后面的元素都是0。


要是我想把char a[m][n];全部的字符都给初始化为字母a,用什么格式?(我试过了,这样是不行的:char a[m][n]={'a'};这只是把第一个给置a,而已)
-------------------------------------------------------------
memset( a, 'a', m * n * sizeof( char ) );


如果把每一个元素都给初始化为'\0'又怎样才行?
---------------------------------------
char a[m][n] = {0};


yiskylee 2009-08-21
  • 打赏
  • 举报
回复
顶一下#3的,连续存储,遍历就可以。
akira88 2009-08-21
  • 打赏
  • 举报
回复
只要进行了初始化,未初始化部分,自动初始化为0,对于字符来说 0和\0是一样的
mengde007 2009-08-21
  • 打赏
  • 举报
回复
二位字符数组在内存上时连续的;记住这个你就知道怎么初始化了;
liuchaotao 2009-08-21
  • 打赏
  • 举报
回复
memset( a, 'a', m*n*sizeof(char) );
loveour 2009-08-21
  • 打赏
  • 举报
回复
同一个字符用memset就可以啦,MSDN里面有个一维数组的版本
// crt_memset.c
/* This program uses memset to
* set the first four chars of buffer to "*".
*/

#include <memory.h>
#include <stdio.h>

int main( void )
{
char buffer[] = "This is a test of the memset function";

printf( "Before: %s\n", buffer );
memset( buffer, '*', 4 );
printf( "After: %s\n", buffer );
}

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧