c数组与字符串
原文链接: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数组与字符串的更多相关文章
- Base-64 字符数组或字符串的长度无效等问题解决方案
项目特殊需要,调用ActiveX三维控件进行控件某一特殊部位的截图操作,这个截图保存由ActiveX控件控制保存到本地是没问题的,现在需要将这个截图上传到服务器,多人共享,就牵扯到需要读取本地文件…… ...
- C语言 第七章 数组与字符串
一.数组 1.1.数组的概念 用来存储一组相同类型数据的数据结构.有点像班上放手机的手机袋,超市的储物柜. 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. ...
- js对象、数组转换字符串
对象转换成字符串需要使用toString()方法. 1 var a = function(){ 2 console.log(111); 3 }; 4 var b = a.toString(); 5 c ...
- javascript中数组和字符串的方法比较
× 目录 [1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的相同之处,它们的方法众多,且相似度很高:但它们又有不同之处,字符串是不可变值,于是可以把其看作只读的数 ...
- json对象,数组,字符串总结
关于json对象,数组,字符串的总结 什么是json? JSON(JavaScript Object Notation) 一种轻量级的数据交换格式,JSON采用完全独立于语言的文本格式...(来自百 ...
- @proprety数组字典字符串用copy和strong区别(深浅拷贝)
//// @proprety数组字典字符串用copy和strong区别(深浅拷贝).h// IOS笔记//// /* _proprety________copy_strong_________h ...
- php byte数组与字符串转换类
<?php /** * byte数组与字符串转化类 * @author ZT */ class Bytes { /** * 转换一个string字符串为byte数组 * @param $str ...
- 关于PHP数组转字符串详细介绍
随着时代的发展,我们的开发技术也随着更新,对于PHP还是比较常用的,于是我研究了一下PHP数组转字符串,在这里拿出来和大家分享一下,希望对大家有用. 经常需要使用PHP处理字符string,PHP内置 ...
- PHP基础语法: echo,var_dump, 常用函数:随机数:拆分字符串:explode()、rand()、日期时间:time()、字符串转化为时间戳:strtotime()可变参数的函数:PHP里数组长度表示方法:count($attr[指数组]);字符串长度:strlen($a)
PHP语言原理:先把代码显示在源代码中,再通过浏览器解析在网页上 a. 1.substr; //用于输出字符串中,需要的某一部分 <?PHP $a="learn php"; ...
随机推荐
- EF CodeFirst 使用T4模板 生成文件
小编是个实用主义者,并没有深入的去理解T4的原理.只是根据自己的需求,在博客园里的前辈哪里找的资料,结合自己的理解,在项目中使用了T4模板. 最近的项目用了他,很方便,节省了不少代码量. 想利用T4做 ...
- Asp.net 配置web.Config 在出错时跳转到相应页面
<!--<customErrors mode="On" defaultRedirect="error.aspx"> <erro ...
- android studio安卓项目出现Error: Default Activity Not Found错误无法编译的解决方案
项目明明是没有问题的,有时候突然就出现Error: Default Activity Not Found错误,以前出现过我重新安装了android studio 都没有用,后来在网上(http://s ...
- XCode设置自己windows习惯的快捷键(比如Home、End键)
Xcode的preference(command+,)中可以设置Key Bindings.绑定自己习惯的快捷键.实测系统快捷键设置同样名字也可以生效,但操作比较繁琐这里就不介绍了. 1.打开Xcode ...
- 【转】stopPropagation, preventDefault 和 return false 的区别
因为有父, 子节点同在, 因为有监听事件和浏览器默认动作之分. 使用 JavaScript 时为了达到预期效果经常需要阻止事件和动作执行. 一般我们会用到三种方法, 分别是 stopPropagat ...
- replace实现正则过滤替换非法字符
html+js结构如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...
- pythonchallenge 解谜 Level 3
第三关. 问题的解法在于正则表达式. 首先...你应该能找到需要正则的字符在哪里...那就好了! 题意就是说: One small letter, surrounded by EXACTLY thre ...
- Android 中关于ListView分割线的设置
今天发现许多App上的listview的item之间的分割线都只显示了右边一部分,而左边的那一半则没有,第一反应则是给分割线设置一张背景图片就ok了: android:divider="@m ...
- 如何设置mysql远程访问及防火墙设置
笔者在一个实际的项目中需要MYSQL远程访问. 情景: 安装好Mysql, 本地访问正常,很奇怪局域的机器都无法访问该服务器上的MYSQL数据库. 经过资料查找 原来Mysql默认是不可以通过远程机器 ...
- Java中@Override的作用
@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: 1.可以当注释用,方便阅读:2.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错.例如 ...