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

一、数组

定义数组:

int count[9];

赋值:

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

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

int count[] = { 3, 2, 1, };

编译器会根据Initializer有三个元素确定数组的长度为3。

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

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

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

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

然后这样调用:

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

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

二、字符串

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

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', 'l', 'o', '\0' };

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

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

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

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

字符串字面值的长度包括'\0'在内一共15个字符,编译器会确定数组str的长度为15。在printf函数中可以用%s作为字符串的占位符。

三、多维数组

例如:

int a[3][2] = { 1, 2, 3, 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, }  };

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

c数组与字符串的更多相关文章

  1. Base-64 字符数组或字符串的长度无效等问题解决方案

    项目特殊需要,调用ActiveX三维控件进行控件某一特殊部位的截图操作,这个截图保存由ActiveX控件控制保存到本地是没问题的,现在需要将这个截图上传到服务器,多人共享,就牵扯到需要读取本地文件…… ...

  2. C语言 第七章 数组与字符串

    一.数组 1.1.数组的概念 用来存储一组相同类型数据的数据结构.有点像班上放手机的手机袋,超市的储物柜. 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. ...

  3. js对象、数组转换字符串

    对象转换成字符串需要使用toString()方法. 1 var a = function(){ 2 console.log(111); 3 }; 4 var b = a.toString(); 5 c ...

  4. javascript中数组和字符串的方法比较

    × 目录 [1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的相同之处,它们的方法众多,且相似度很高:但它们又有不同之处,字符串是不可变值,于是可以把其看作只读的数 ...

  5. json对象,数组,字符串总结

    关于json对象,数组,字符串的总结 什么是json? JSON(JavaScript Object Notation)  一种轻量级的数据交换格式,JSON采用完全独立于语言的文本格式...(来自百 ...

  6. @proprety数组字典字符串用copy和strong区别(深浅拷贝)

    ////  @proprety数组字典字符串用copy和strong区别(深浅拷贝).h//  IOS笔记//// /* _proprety________copy_strong_________h ...

  7. php byte数组与字符串转换类

    <?php /** * byte数组与字符串转化类 * @author ZT */ class Bytes { /** * 转换一个string字符串为byte数组 * @param $str ...

  8. 关于PHP数组转字符串详细介绍

    随着时代的发展,我们的开发技术也随着更新,对于PHP还是比较常用的,于是我研究了一下PHP数组转字符串,在这里拿出来和大家分享一下,希望对大家有用. 经常需要使用PHP处理字符string,PHP内置 ...

  9. PHP基础语法: echo,var_dump, 常用函数:随机数:拆分字符串:explode()、rand()、日期时间:time()、字符串转化为时间戳:strtotime()可变参数的函数:PHP里数组长度表示方法:count($attr[指数组]);字符串长度:strlen($a)

    PHP语言原理:先把代码显示在源代码中,再通过浏览器解析在网页上 a. 1.substr;  //用于输出字符串中,需要的某一部分 <?PHP $a="learn php"; ...

随机推荐

  1. Chrome - 怎样独立窗口打开开发人员工具

    打开开发人员工具, 右上角找到下图红圈的键, 长按左键直到出现绿圈的键, 别松开鼠标, 把指针移到绿圈的键上面, 松开左键, 好了, 一个独立窗口粗线了. 转载请声明出处: http://www.cn ...

  2. [机器学习] Ubuntu 软件源更新(校园网)以及问题总结

    最近在折腾Linux,在校园网下怎么能够很好的获取软件很是让我头疼啊~~~ 总结一下吧!!! 首先是校园网的源地址: 清华大学:https://mirrors.tuna.tsinghua.edu.cn ...

  3. window下xampp配置多端口、多站点步骤

    好些日子没整理知识了,许多新东西不整理出来时间一长就淡忘了.看来以后得继续坚持整理. 配置XAMPP多端口.多站点如下步骤: 多端口: (一个域名下同时配置多个端口,从而达到访问不同程序) 效果例如: ...

  4. BestCoder Round 70

    惨败,不能再嘲笑别人了,否则自己也会像别人那样倒霉 HDU 5615:http://acm.hdu.edu.cn/showproblem.php?pid=5615 求ax^2+bx+c能否拆成(px+ ...

  5. seajs学习一天后的总结归纳

    公司项目最近需要将js文件迁移到seajs来进行模块化管理,由于我以前主要接触模块化开发是接触的AMD规范的requireJS,没有接触过CMD规范,而且在实际项目中还没有用过类似技术.于是,我非常兴 ...

  6. docker-compose启动报错,解决方案

    [root@cache1 www]# docker-composeTraceback (most recent call last): File "/usr/bin/docker-compo ...

  7. 关于html5新增的功能(百度)

    HTML5包含以下新增和更新功能: 1. 新增了一种HTML文档类型:<DOCTYPE html>   2. 新增了一些结构化标记的元素(<header>,<nav> ...

  8. Mongodb常用命令介绍

    查看命令的方式: 1.在shell中运行db.listCommands() 2.在浏览器中访问管理员接口:http://ipaddress:28017/_commands 下面介绍在Mongodb中最 ...

  9. 用.net在画出镂空图片

    最近的一个项目需要用到这个东西,冥思苦想了好几天.还是在同事的帮助下,完成此项难题,希望能够帮助以后的博友们 ! 废话不多说,先看看效果图吧. 首先写一下讲一下思路,首先画一张图,当你的背景,然后在图 ...

  10. easyui-conbotree树形下拉框。。。转

    最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用: 首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系) 1.下面我们用hibernate建一下对应的额实体类: ...