字符串
字符串是一个或多个字符的序列,比如:"zing went eht string of my heart ".双引号不是字符串的一部分,双引号只是在告知编译器括起来是字符串。
char 类型数组和null字符
- 字符串存储在char类型的数组中。
- 数组由连续的存储单元组成,字符串的字符被存储在相邻的存储单元中,每一个单元存一个字符
- 数组末尾位置的字符是\0,称为空字符,用它标记字符串的结束,字符串一定以\0空字符结束,意味着数组容量必须至少比待存储的字符数多1
char类型数组声明
char name[40];
- name后面的方括号表明这是一个数组,方括号中的40表明该数组的元素数量
- char表名每个单元的类型
使用字符串
#include<stdio.h>
#define Praise "you are an extraordinary being."
int main()
{
char name[40];
printf("what\'s your name?");
scanf("%s",name);
printf("hello,%s.%s\n",name,Praise);
return 0;
}
what's your name?Angle Plains
hello,Angle.you are an extraordinary being.
- %s告诉printf()打印一个字符串
- scanf()只读取了Angle Plains中的Angle,因为在遇到第一个空白(空格,制表符,换行符)时就不再读取输入
- 一般而言,%s转换说明,scanf()只会读取字符串的一个单词,而不是一整句
字符串和字符
字符串常量"x"和字符常量’x’不同。
- 区别之一:'x’是基本类型(char),"x"是派生类型(char 数组)
- 区别之二:"x"实际由两个字符组成:'x’和\0
strlen()函数
sizeof运算符,他以字节为单位给出对象大小,strlen()函数给出字符串的字符长度
#include<stdio.h>
#include<string.h>
#define Praise "you are an extraordinary being."
int main()
{
char name[40];
printf("what\'s your name?");
scanf("%s",name);
printf("hello,%s.%s\n",name,Praise);
printf("%u %u\n",strlen(name),sizeof name);
printf("%u %u\n",strlen(Praise),sizeof Praise);
return 0;
}
what's your name?ffdjs
hello,ffdjs.you are an extraordinary being.
5 40
31 32
- string.h头文件包含多个与字符串相关的函数原型,包括strlen()函数
- 一般的,c把函数相关的函数归为一类,为每类函数提供一个头文件比如,printf()函数和scanf()函数都隶属标准输入输出函数,使用头文件stdio.h
- sizeof运算符把\0也计入在内,strlen()得出的是字符串中的字符数(包括空格和标点符号)但不计入\0.
- c99/11标准为sizeof运算符返回类型添加%zd,%u,%lu转换说明,对于strlen()同样适用。要知道对于早期c,sizeof运算符和strlen()返回的实际类型是(unsigned或unsigned long)
- 对于sizeof何时加圆括号,运算对象是类型时(char ,int,float 等类型),需要加圆括号。是特定量时,可加可不加。
常量和c预处理器
#include<stdio.h>
#define PI 3.14159
int main()
{
float area,radius,circum;
scanf("%f",&radius);
area=PI *radius*radius;
circum=2.0*PI*radius;
printf("面积=%f,周长=%f\n",area,circum);
printf("面积=%.2f,周长=%1.2f\n",area,circum);
return 0;
}
1
面积=3.141590,周长=6.283180
面积=3.14,周长=6.28
- 使用预处理器可以定义常量,只需要开头加 #define PI 3.14159。在编译程序时,PI都会都被替换成3.14159。这一过程称为编译时替换。
- 格式:首先是#define,再是符号常量名(PI),最后是符号量的值(3.14159)(值还可以是字符,字符串常量),不用添加等号
- 建议使用大写,可以增加可读性,命名规则和变量相同。
const限定符
const关键字,用于限定一个变量为只读。
声明:
const int months=12;//months 在程序中不可更改,值为12
- 可以使用months的值,但是不能更改