二维数组的元素为字符串的赋值问题?
有以下程序#include<stdio.h>main(){charss[3][5]={"aaaa","bbbb","cccc"};inti=0;do{ss[i][++i]...
有以下程序
#include <stdio.h>
main()
{ char ss[3][5]={"aaaa","bbbb","cccc"};
int i=0;
do
{ ss[i][++i]=0; }
while( i<3 );
do
{ puts(ss[i-1]); }
while( --i>0 );
}
执行后的输出结果是______。
答案:ccc
bb
a
请问:不应该是ccc0吗?程序中ss[i][++i]=0; 应该为ss[i][++i]=‘/0’;的解才是给的答案吧
bb00
a000 展开
#include <stdio.h>
main()
{ char ss[3][5]={"aaaa","bbbb","cccc"};
int i=0;
do
{ ss[i][++i]=0; }
while( i<3 );
do
{ puts(ss[i-1]); }
while( --i>0 );
}
执行后的输出结果是______。
答案:ccc
bb
a
请问:不应该是ccc0吗?程序中ss[i][++i]=0; 应该为ss[i][++i]=‘/0’;的解才是给的答案吧
bb00
a000 展开
2个回答
展开全部
1.C/C++中数组是不能整体赋值的,只能声明时附带初始化。初始化是编译期行为,而赋值是运行期行为,两者是严格不同的。
int a[3][4]={1,5,9,10};
左边是int [3][4]类型,右边是int []类型,初始化列表和初始化变量类型不匹配,会出现编译警告。
不过关于值的问题,LZ的想法基本正确。初始化中按地址顺序复制初始化列表的值给数组元素。不过要注意,如果不初始化,数组的值将是随机数(除非数组是全局变量或静态变量,会自动初始化为0)。
2.注意C中的“多维”数组实际是数组的数组(……的数组)。因此char xx[4][10]的元素是4个char [10]类型的变量。这里的初始化中是把
"adfd","dfc","dfadf","fdalipe"分别放到xx[0]、xx[1]、xx[2]、xx[3]中。
xx[0]之类作为一个char [10]类型的变量,即char类型定长数组,可以容纳一个长度小于10的字符串,所以这里的的初始化是合法的。每个字符串常量用于初始化时,把各个字符按连续地址顺序依次复制到目标变量的对应位置中,遇到字符串结尾编译器会自动在后面补'\0'。这里只要进行了初始化,变量中余下的未被初始化字符串覆盖的空间会在初始化前预先置为0(即'\0'、NULL)。
int a[3][4]={1,5,9,10};
左边是int [3][4]类型,右边是int []类型,初始化列表和初始化变量类型不匹配,会出现编译警告。
不过关于值的问题,LZ的想法基本正确。初始化中按地址顺序复制初始化列表的值给数组元素。不过要注意,如果不初始化,数组的值将是随机数(除非数组是全局变量或静态变量,会自动初始化为0)。
2.注意C中的“多维”数组实际是数组的数组(……的数组)。因此char xx[4][10]的元素是4个char [10]类型的变量。这里的初始化中是把
"adfd","dfc","dfadf","fdalipe"分别放到xx[0]、xx[1]、xx[2]、xx[3]中。
xx[0]之类作为一个char [10]类型的变量,即char类型定长数组,可以容纳一个长度小于10的字符串,所以这里的的初始化是合法的。每个字符串常量用于初始化时,把各个字符按连续地址顺序依次复制到目标变量的对应位置中,遇到字符串结尾编译器会自动在后面补'\0'。这里只要进行了初始化,变量中余下的未被初始化字符串覆盖的空间会在初始化前预先置为0(即'\0'、NULL)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询