整型常量的表示形式 | 特点 | 举例 |
---|---|---|
十进制 | 0-9 的数字序列组成,数字前可带正负号 |
256,-128,0,+7 |
八进制 | 以0 开头,后跟0-7 的数字序列组成,0 前可带正负号 |
021,-017 |
十六进制 | 以0x 开头,后跟0-9 ,a-f 的数字序列组成 |
0x12,-0x1F |
l
,如:-256L,1024lu
,如:30u,256U, lu
,30lu0.345e-5
=0.00000345
f
l
字符 | 含义 |
---|---|
\n |
换行(new line) |
\r |
回车(不换行)(carriage return) |
\0 |
空字符,代表ASCII码值为0的字符 |
\t |
水平制表(horizontal tabulation) |
\b |
退格(backspace) |
\" |
双引号(double quotation mark) |
\' |
单引号(single quotation mark) |
\\ |
反斜线(backslash) |
\? |
问号 |
*全局变量定义时未赋初值则初始化为0
char
类型与int
类型的关系char
型可看作一种特殊的int
型。char
型数据和int
型数据可以相互转换,即char
型数据可以参与任何int
型数据的运算 char
型变量既可以以字符格式输出,也可以以整形格式输出,以整形格式输出即输出其ASCII码的十进制值。char ch='a';
printf("%c,%d\n",ch,ch);
-->a,97
char
型数据在内存中只占1个字节 int
型与程序执行环境的字长有关。16位下占16位,即2个字节;32位下占32位,即4个字节。 sizeof
计算类型的字节数double
型函数名 | 功能 |
---|---|
sqrt(x) | 计算平方根 |
fabs(x) | 计算绝对值 |
log(x) | 计算lnX的值 |
log10(x) | 计算lgX的值 |
exp(x) | 计算e^x的值 |
pow(x,y) | 计算x^y的值 |
=
左侧只能是变量名char
和int
类型&
:按位与,一种对某位清零的手段,即两个操作数中任意一位为0,则结果置0|
:按位或,一种对某位置1的手段,即两个操作数中任意一位为1,则置1^
:按位异或,两个操作数位不同,则置1<<
:左移位,每左移一位相当于乘2>>
:右移位,每右移一位相当于除2printf()
格式转换符 | 用法 |
---|---|
%d | 带符号的十进制整数 |
%u | 无符号的十进制整数 |
%o | 无符号的八进制整数,不输出前导符0 |
%x | 无符号的十六进制整数(小写),不输出前导符0x |
%c | 输出一个字符 |
%s | 输出字符串 |
%% | 百分号% |
* 格式修饰符
格式修饰符 | 用法 |
---|---|
英文字母l |
输出long型数据 |
最小域宽m |
指定输出项输出时所占的列数。若m为正整数,向右靠齐。若m为负整数,向左靠齐。 |
显示精度.n |
对于浮点数,指定输出的浮点数的小数位数。对于字符串,指定输出截取的子串字符个数 |
scanf()
格式转换符 | 用法 |
---|---|
%d | 十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数 |
%c | 字符,空白字符(空格、回车、制表符)也作为有效输入 |
%s | 字符串,遇到第一个空白字符输入结束 |
%f | 实数 |
%% | 百分号 |
* 格式修饰符
格式修饰符 | 用法 |
---|---|
忽略输入修饰符* |
表示对应的输入项在读入后不赋给相应的变量 |
域宽m |
指定输入的数据的宽度,按此宽度截取所需数据 |
int score[100]
合法,而int score[n]
非法score={1,2,3,4,5};
非法int matrix[3][2]={(1,2,3,4),{5,6,7,8}};//按行初始化
int matrix[3][2]={1,2,3,4,5,6,7,8};//按元素初始化
int matrix[1][2]={0};
等价于
int matrix[1][2]={0,0};
void sort(int arr[10]);
等价于
void sort(int arr[]);
void func(int arr[4][3]);
void func(int arr[][3]);
都合法,但
void func(int arr[][]);
非法
'\0'
作为结束标志的一个字符序列。'\0'
占用一字节的存储单元,但是不计入字符串的实际长度。char
数据对数组初始化char str[6]={'C','h','i','n','a','\0'};
此种方式赋初值,必须人为的加入'\0'
char str[]="China";
* 对于二维字符数组存放多个字符串,第二维的长度不能省略,应该按最长的字符串长度设定。
char weekday[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
c
格式字符一个个单独输入/输出for(i=0;i<10;i++){
scanf("%c",&str[i]);
}
for(i=0;str[i]!='\0';i++){
printf("%c",str[i]);
}
s
格式作为字符串整体输入/输出scanf("%s",str);
printf("%s",str);
【注】
space
、enter
、tab
作为以%s
格式输入字符串的分隔符,因而不能被读入,遇到这些字符即结束输入。
'\0'
时输出结果,并自动输出一个换行符a=*p++;
,其中++
与*
优先级相同,且是右结合的。 a=*(p++);
,而++
又位于变量p
之后,即相当于a=*p;
p=p+1;
a=(*p)++
相当于a=*p;
*p=*p+1;
char str[10]="China";
str
,数组名str
代表字符串"China"
在内存中存放的首地址。char *ptr="China";
ptr
,并在定义时用字符串"China"
在内存中的首地址为指针变量ptr
赋初值。char *ptr;
ptr="China"; //正确
字符串中的一个字符的地址赋给ptr
,相当于用地址值对ptr
赋初值。
* 字符数组赋值
char str[10];
str="China";//错误
以上方法是错误的,数组名是数组元素的首地址,是一个常量值,无法被改变。
将一个字符串赋值给字符数组必须使用strcpy
strcpy(str,"China");
char str[10];
scanf("%s",str);
char *ptr,str[10];
ptr=str;
scanf("%s",ptr);
4.类型不同
* 字符数组的数组名是一个地址常量,值不能改变
* 字符指针是一个变量,值可以被改变
【注】
由于数组名作函数形参与指针变量作函数形参的等价性。因此,在用数组名作函数形参的函数体内部可以对该声明为形参的数组名进行和指针一样的自增、自减运算。除此之外的数组名都是一个指针常量,不能进行自增、自减的运算。