C中字符串的几种定义方法及说明
来源:互联网 发布:网络电玩 编辑:程序博客网 时间:2024/04/30 03:14
在C中定义字符串有下列几种形式:字符串常量,char数组,char指针
1.字符串常量
即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为
一个字符串存储在内存中。如:printf("%s","hello"); //"hello"
如果字符串文字中间没有间隔或间隔的是空格符,ANSI C 会将其串联起来。例:
char greeting[50] = "hello,and" "how are" "you";
等价于:
char greeting[50] = "hello,and how are you";
字符串常量属于静态存储类。静态存储是指如果在一个函数中使用字符串常量,即使是多次调用了这个函数,
该字符串在程序的整个运行过程中只存储一份。整个引号的内容作为指向该字符串存储位置的指针。这一点与
把数组名作为指向数组存储位置的指针类似。
2.字符串数组及其初始化
初始化例子:
char m[40] = "hello,world"; //定义字符串数组时必须指定数组大小(整型常量),在指定大小时,要确保数组的大小比预定的大一个,因为编译器会自动添加'\0'。
//多余的元素会初始化为'\0'
char m={'h','e','l','\0'}; //注意标志结束的空字符,若没有它,得到的只是一个字符数组而不是字符串
3.利用char指针定义字符串
char *m = "hello,world"; //自动添加'\0'
注意:此时字符串指针m指向字符串常量,不成用*(m+1)='o'修改此常量,因为这个字符串常量放在常量区不能被修改
4.数组和指针
数组形式和指针形式有什么不同呢?
数组形式: char m[40] = "hello,world";
指针形式: char *m = "hello,world";
数组形式:
- 编译器会把数组名m看作是数组首元素的地址&m[0]的同义词,m是个地址常量。可以用m+1来标识数组里的下一个元素,但不能使用++m,增量运算符只能在变量前使用, 而不能在常量前使用。
- m[40]在计算机内存中被分配一个有40个元素的数组(其中每个元素对应一个字符,还有一个附加的元素对应结束的空字符'\0')。每个元素都被初始化为相应的字符。
- 指针形式(*m)也会在静态存储区为字符串预留空间。此外,一旦程序开始执行,还要为指针变量m另外预留一个存储位置,以在该指针变量中能够存储字符串的地址。
- m指向字符串的第一个字符,可用++m指向第二个字符。 指针m是个变量。
- C中字符串的几种定义方法及说明
- C中字符串的几种定义方法及说明
- C中字符串的几种定义方法及说明
- C语言中字符串的几种定义方式
- C/C++中定义全局变量的几种方法及区别
- C语言中定义结构体的几种方法
- C语言中定义结构体的几种方法
- 几种c/c++中字符串转整形的方法
- 几种c/c++中字符串转整形的方法
- 几种c/c++中字符串转整形的方法
- 几种c/c++中字符串转整形的方法
- 几种c/c++中字符串转整形的方法
- 几种c/c++中字符串转整形的方法
- 关于C++和C中字符串的几点说明
- C语言:定义字符串的几种方式
- 数组指针,字符串指针的几种定义方法
- JavaScript 定义类,定义属性,定义方法的几种方式详解及分析
- C#程序退出的几种方法及说明
- UICollectionView
- ajax 传递参数;省的找了 附带trim 方法; 注意url路径;
- mysql存储过程用游标解决返回的结果级并拼装字符
- 在windows下用cygwin和eclipse搭建cocos2dx的android开发环境
- Linux开发者需要知道的10个技巧--转自IBM developerworks
- C中字符串的几种定义方法及说明
- 找工作知识储备(2)---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- input的file名改变与值获取
- How Improved Short-Circuit Local Reads Bring Better Performance and Security to Hadoop
- 计算机书
- 【使用线程池的好处】多线程的环境中,尽量采用线程池
- Linux C动态加载SO库文件
- Java的内存和垃圾回收机制
- 大型网站系统架构分析