加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c数组与字符串

发布时间:2020-12-16 09:09:20 所属栏目:百科 来源:网络整理
导读:原文链接:http://www.orlion.ga/913/ 一、数组 ???? ????定义数组: int?count[9]; ????赋值: int?count[4]?=?{?3,?2,?}; ????未赋初值的元素用0初始化。如果定义数组的同时初始化它,也可以不指定数组的长度: int?count[]?=?{?3,?1,1); -webkit-text-strok

原文链接:http://www.orlion.ga/913/

一、数组

????

????定义数组:

int?count[9];

????赋值:

int?count[4]?=?{?3,?2,?};

????未赋初值的元素用0初始化。如果定义数组的同时初始化它,也可以不指定数组的长度:

int?count[]?=?{?3,?1,1); -webkit-text-stroke-width: 0px'>????编译器会根据Initializer有三个元素确定数组的长度为3。

????虽然数组与结构体有很多相似之处,但是数组不能互相赋值。如下是错误的:

int?a[5],?b[5]?=?{?4,?3,?1?};
a?=?b;

????既然不能互相赋值,也就不能用数组类型作为函数的参数或返回值。如果写出这样的函数定义:

void?foo(int?a[5])
{
????????...
}

????然后这样调用:

int?array[5]?=?{};
foo(array);

????编译器不会报错,但这样写不是一个传数组类型参数的意思。对于数组类型有一条特殊规则:数组名做右值使用时,自动转换成指向数组首元素的指针。所以上面的函数调用实际是传了一个指针类型的参数。这也解释了为什么数组类型不能互相赋值。

?

二、字符串

????字符串可以看作一个字符型数组。字符串末尾有个""表示字符串结束。数组元素可以通过数组名加下标的方式访问,而字符串字面值也可以像数组名一样使用:

char?c?=?"Hello,?world.n"[0];

????但是通过下标修改其中的字符却不允许:

"Hello,?world.n"[0]?=?'A';

????字符串字面值是只读的不允许修改,字符串字面值还有一点和数组名类似,做右值 使用时自动转换成指向首元素的指针。所以printf("hello world")实际是传一个指针参数给printf。

????字符数组可以用一个字符串字面值来初始化:

char?str[10]?=?"hello";

????相当于:

char?str[10]?=?{?'H',?'e',?'l',?'o',?''?};

????str的后四个元素没有指定,自动初始化为0,即‘’字符。虽然字符串字面值“hello”是只读的但是用它初始化的数组str是可读可写的。数组str保存了一串字符,以''结尾,也可以叫字符串。如果用于初始化的字符串字面值比数组长,如:

char?str[10]?=?"Hello,?world.n";

????则数组str只包含前10个字符,不包含'',这时编译器一般会警告。如果要用一个字符串字面值准确地初始化一个字符数组,最好的办法是不指定数组的长度,而让编译器自动计算:

char?str[]?=?"Hello,1); -webkit-text-stroke-width: 0px'>????字符串字面值的长度包括''在内一共15个字符,编译器会确定数组str的长度为15。在printf函数中可以用%s作为字符串的占位符。

三、多维数组

????例如:

int?a[3][2]?=?{?1,?4,?5};

????数组a有三个元素,a[0]、a[1]、a[2]。每个元素也是一个数组,例如a[0]是一个数组,它有两个元素a[0][0]、a[0][1],这两个元素的类型是int,值分别是1、2,同理,数组a[1]的两个元素是3、4,数组a[2]的两个元素是5、0。

????多维数组也可以像嵌套结构体一样,用嵌套Initializer初始化,例如上面的二维数组也可以这样初始化:

int?a[][2]?=?{?{?1,?2},???????????????{?3,?4},???????????????{?5,?}??};

????除了第一维的长度可以由编译器自动运算外其他维都必须指定长度。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读