C语言定义字符型数组时,两种初始化方式的区别? 字符串数组初始化为空
字符串数组的初始化方式?
1、直接逐个初始化字符数组:
字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。
1
char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};
注意:如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即'\0' )。
2、用字符串常量来初始化字符数组:
在c语言中,将字符串作为字符数组来处理。因此可以使用字符串来初始化字符数组。
1
char str[]={"I am happy"};
也可以省略花括号。
1
char str[]="I am happy";
但是,上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的。
1
2
char str[];
str="I am happy";//错误,字符数组的赋值只能按元素一一赋值
求具体举例说明C语言数组的初始化和赋初值有何不同?
你的书上好像错了,所谓赋初值一般而言就是初始化啊
从根本上说,其实初始化也并不是编译阶段完成,对于全局变量(数组)而言,一种是exe文件中设定该程序的数据区中的为这个数组存放空间中的值已经是初值了,当然这个值倒是编译程序生成目标程序时设定的,程序运行加载时,给定空间中的内容直接拷贝到空间了,这个不占运行时间(C++中则是程序加载到main函数执行之前完成的,这个也不占运行时间)
对于自动局部变量而言,原则上说,每次运行到该模块就会重新初始化一次,肯定是要占用运行时间的,静态局部变量则第一次运行时才初始化一次,自然也会占用运行时间
至于你用赋值语句设定所谓的初值,一定会占用运行时间
c语言数组的初始化有哪几种
在C语言中,数组的初始化有以下几种方式:
1、定义的时候同时初始化:
int array[10] = {1,2,3,4,5};
2、定义的时候不指定数组大小,由初始化的数组元素来确定大小:
int array[] = {1,2,3,4,5};
3、先定义变量,然后初始化.注意点:定义变量时必须制定数组的大小.此时只能对数组变量成员元素逐一赋值,不能批量赋值.
数组定义与初始化的问题
方括号内不填数组长度的话,编译器会根据大括号里面的元素数目自动计算出数组长度
int x[]={3,6,3,1,3,8};
就是int x[6]={3,6,3,1,3,8};