1.第一个C程序
#include<stdio.h>
int main()
{
//printf("abcdefg");
printf("hello");
/*printf('c');
printf("program");*/
return 0;
}
(1)必须定义入口点(main函数),有且仅有一个
(2)mainret = main(argc, argv, envp) main函数有返回值(返回值为int型),所以用int main(),而不是void main()
(3)主函数中返回0
(4)printf函数是格式化的输出语句
(5)//C++的注释风格
/* */C语言注释风格,不支持嵌套
(6)"hello" 字符串
‘c’ 字符
(7)字符串的结束标志:\0
#include<stdio.h>
int main()
{
char arr[3] = {'a', 'b', 'c'};
printf("%s\n",arr);
return 0;
}
arr中没有给定字符串结束标志“\0”
2.转义字符
int main()
{
printf("(Are you ok??) ");
printf("(Are you ok\?\?)");
return 0;
}
输出:Are you ok] Are you ok??
三字母词:就是几个字符的序列,合起来表示另一个字符。三字母词可以使C环境在某些缺少一些必备字符的字符集上使用。
三字母词 | 表示字符 |
??( | [ |
??) | ] |
??< | { |
??> | } |
转义字符:
转义字符 | 释义 |
\? | 在书写连续多个问号时使用,防止它们被解析为一个转义序列符 |
\' | 用于表示字符常量‘ |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字 |
\xddd | ddd表示3个十六进制的数字 |
#include <stdio.h>
int main()
{
printf("%d\n", strlen("abcdef"));
printf("%d\n", strlen("c:\test\32\test.c"));
return 0;
}
输出:6 13(32算一个字符)
3.数据类型
char 字符数据类型
short 短整型
int 整型
long 长整型
long long 更长的整型
float 单精度浮点型
double 双精度浮点型
#include<stdio.h>
int main()
{
char c = 'w';
int i = 0;
short s = 0;
long l = 0;
long long ll = 0;
float f = 0.0;
double d = 0.0;
printf("%d\n", sizeof(c)); //1
printf("%d\n", sizeof(i)); //4
printf("%d\n", sizeof(s)); //2
printf("%d\n", sizeof(l)); //32平台上为4,64位平台上为8
printf("%d\n", sizeof(ll)); //8
printf("%d\n", sizeof(f)); //4
printf("%d\n", sizeof(d)); //8
return 0;
}
4.变量与常量
(1)变量
char a = 'q';
int n = 100;
float w = 65.4
a, n, w 都是不同类型的变量
变量命名规则:
C语言规定必须以字母或下划线开头,后面可以跟若干个字母、数字、下划线,但变量名不能是关键字。推荐《高质量C++编程》。
first_name FirstName
(2)常量
a. 字面常量
‘q', 3.14, '1', '\n'
b. const定义的常量
#include<stdio.h>
int main()
{
int num = 5;
const int c_num = 5;
num = 20;
c_num = 20;//此行发生错误
return 0;
}
在C语言中,当const修饰一个标识符时,这个标识符依然是一个变量,但是它具有常属性,不能被直接改变。arr[c_num]是非法的。然而在C++中,const修饰的标识符就是常量,arr[c_num]合法。
c. #define定义的标识符常量
#include<stdio.h>
#define PAI 3.14
#define MAX 10
int main()
{
int radius = 0;//半径
double area = PAI * radius * radius; //圆面积
arr[MAX] = {0}; //合法
return 0;
}
d. 枚举常量
枚举关键字:enum
枚举的优势:
增加程序的可读性;
提供有限个选项,避免因错误输入其他信息,从而规范了程序的有效执行性。
#include<stdio.h>
enum Sex
{
MALE,
FEMALE,
SECRET
};
int main()
{
printf("%d\n", MALE); //0
printf("%d\n", FEMALE); //1
printf("%d\n", SECRET); //2
enum Sex sex = MALE;
}
枚举默认从0开始,依次递增。枚举常量是常量,不能被修改。
5.volatile
#include<stdio.h>
int main()
{
char a = 1;
char *p1 = &a;
const int num = 10;
int *p = (int *)#
*p = 20; //(解引用操作)内存里的num已经变为20了
printf("%d\n", num);
return 0;
}
vs输出10,const定义的num被放在了寄存器里,即使内存里的num已经被改变了,但仍输出寄存器里的num(编译器遗留化) 。
定义变量时加关键字volatile以保证内存的可见性(volatile const num = 10;)。
6.变量的分类
变量根据出现的位置可分为局部变量和全局变量。
在代码块之内的变量为局部变量,代码块之外的变量为全局变量;
当局部变量和全局变量冲突时使用局部变量;
全局变量的作用域在整个工程。
static修饰局部变量,变量生命周期变长。
#include<stdio.h>
void test()
{
int a = 1;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
test();
}
return 0;
}
输出2 2 2 2 2 2 2 2 2 2
若在test函数中用static修饰变量a,则输出2 3 4 5 6 7 8 9 10 11
7.printf小知识
#include<stdio.h>
int main()
{
printf("%d\n", printf("%d", printf("%d", 43)));
}
输出:4321
printf("%d", 43)返回2(2个字符)。
printf函数可以有很多个参数 :
#include<stdio.h>
int main()
{
printf("love\n");
printf("%s", "love\n");
printf("%c%s", 'l', "ove");
}