1.C语言是一门计算机语言(人和计算机交流的语言),C、C++、JAVA、Python等都是计算机语言。
2.语言的发展,最初是二进制语言,即0和1,因为计算机硬件的基础是电,而电平只有正电和负电只分,即0和1,这时会编程的人是科学家。
3.譬如用10100001表示ADD,像ADD这样的符号叫做助记符,用助记符表达的语言叫做汇编语言,再往后发展就是B语言,C语言,C++等。就好像照相机一样,最初人们要去照相馆找专门的照相师傅才能照相,随着社会的发展,有了数码相机,手机,人人都会照相,门槛越来越低了,使用的人也越来越多了。
4.C语言早起不是很成熟,逐渐变得成熟,流行。由于各家都在C语言上做优化,导致各个机构的C语言不统一,于是有了一个国际标准C89/C90,甚至后面的C99,C11,但是由于C99和C11并没有流行起来,导致很多编译器都不支持C99和C11。这样的统一导致C语言在很多编译器上都可以进行编译,也便于交流和流行。
5.写C代码,良好的习惯是创建工程。一般会有.c文件(源文件)和.h文件(头文件)
6.第一个C文件
#include <stdio.h>//stdio.h是C语言本身提供给我们的库函数,想要调用库函数需要用#include 这样的方式
//stdio的意思是,std-标准 standard input output
int main() //主函数-程序的入口-有且只有一个
//main前面的int表示main函数调用返回一个整数值
//以前的教材也有void maiin()这样的写法,但这样的写法已经过时了,不要再用了
{
printf("hello world\n");//在屏幕上输出hello world并换行
//\n是换行的意思
return 0;//返回0
}
7.数据类型
char //字符数据类型
short //短整型
int //整型
long //长整型
long //更长的整型
float //单精度浮点数
double //双精度浮点数
//%c 打印字符格式的数据
//%d 打印整型十进制的数据
//%f 打印浮点型的数据,小数
//%p 以地址的形式打印
//%x 打印16进制的数字
//%x 打印8进制的数字
#include <stdio.h>
int main()
{
char ch ='A' ;// 向内存申请一块空间来存放字符A,而ch是一种字符类型,同时也是这块空间的名字
printf("%c\n",ch);//%c 打印字符格式的数据
return 0;//返回0
}
分析每种数据类型所占空间内存的大小
#include <stdio.h>
int main()
{
printf("char所占的内存大小为 %d\n",sizeof(char));//1个字节,8个位
printf("short所占的内存大小为%d\n",sizeof(short));//2个字节,16个位
printf("int所占的内存大小为%d\n",sizeof(int));//4个字节,32个位
printf("long所占的内存大小为%d\n",sizeof(long));//4个字节或者8个字节
printf("long long所占的内存大小为%d\n",sizeof(long long));//8个字节,64个位
printf("float所占的内存大小为%d\n",sizeof(float));//4个字节,32个位
printf("double所占的内存大小为%d\n",sizeof(double));//8个字节,64个位
return 0;//返回0
}
为什么long可能是4个字节,也可能是8个字节。因为C语言标准规定只需要sizeof(long)>=sizeof(int)即可,而int占4个字节,所以long占4或者8个字节都符合标准,所以在不同的编译器下可能出现不一样的结果,但都是满足标准的。
从上面就可以知道
short 所能表示的数字大小为0—22^16-1,即0—65535;
int所能表示的数字大小为0—22^32-1,即0—65535;
全局变量和局部变量
#include <stdio.h>
int num1=10;//全局变量
int main()
{
int num2=20;//局部变量
return 0;
}
上面代码里面的变量num1属于全局变量,定义在代码块{}之外的变量;而num2属于局部变量,定义在代码块{}之内的变量。
局部变量和全局变量的名字建议不要相同,容易误会,产生bug,当局部变量和全局变量的名字相同的时候,局部变量优先。
#include <stdio.h>
int a=10;//全局变量
int main()
{
int a=20;//局部变量
printf("%d\n",a);
return 0;
}
//输出为20,说明局部变量优先级更高
变量的使用,输入以及输出
#include <stdio.h>
int main()
{
#include <stdio.h>
int main()
{
//C语言语法规定,变量要定义在当前代码的最前面
//计算两个数的和
int num1=0;
int num2=0;
int sum=0;
//输入函数
scanf("%d%d",&num1,&num2); //取地址符号&
sum=num1+num2;
printf("sum=%d\n",sum);
return 0;
}
}
变量的作用域以及生命周期
1.局部变量的作用域是变量所在的局部范围
2.全局变量的作用域是整个工程
|
|
extern关键字,用来申明外部符号,可以在一个源文件里面调用另外一个源文件里面的变量。
//sum.c
int num=100
//main.c
int main()
{
extern int num;
printf("num=%d\n",num);//打印num=100
return 0;
}
生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束
2.全局变量的生命周期是:整个程序的生命周期
|
|
常量:
1.字面常量
2.const修饰的常变量,该变量的值无法改变
|
|
3.#define定义的标识符常量
4.枚举常量
枚举关键字:enum
#include <stdio.h>
enum Sex
{
MALE,
FEMALE,
SECRET
};
//MALE,FEMALE,SECRET-枚举常量
int main()
{
printf("%d\n",MALE);//0
printf("%d\n",FEMALE);//1
printf("%d\n",SECRET);//2
return 0;
}
5.字符串+转义字符+注释
由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
注意:字符串的结束标志是一个'\0'
的转义字符,在计算字符串长度的时候'\0'
是结束标志,不算作字符串的内容。
"abcdefg";
"hello bit";
"";//空字符串
问题:如果想要把字符串"abc"
存起来,应该放在哪里呢。
字符串后面默认带有'\0'
,这是字符串的结束标志。
#include <stdio.h>
int main()
{
char a1[]={"abc"};//数组
//"abc"---'a''b''c''\0'--'\0'字符串的结束标志
char a2[]={'a','b','c','\0'};
printf("%s\n",a1);
printf("%s\n",a2);
return 0;
}
#include <stdio.h>
#include <cstring>
int main()
{
char a1[]={"abc"};//数组
//"abc"---'a''b''c''\0'--'\0'字符串的结束标志
char a2[]={'a','b','c','\0'};
char a3[]={'a','b','c'};
printf("%d\n",strlen(a1));//strlen--计算字符串长度的
printf("%d\n",strlen(a2));
printf("%d\n",strlen(a3));
return 0;
}
转义字符'\n'
的演示
#include <stdio.h>
int main()
{
printf("abcn");//打印出来是abcn
printf("abc\n");//打印出来是abc+换行
return 0;
}
常用的字符串
转义字符 | 释义 |
---|---|
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\’ | 用于表示字符常量’ |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行符 |
\r | 回车符 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示 1~3个八进制的数字。如:\130 X |
\xdd | dd表示2个十进制的数字。如:\x30 0 |
#include <stdio.h>
#include <string.h>
int main()
{
printf("%d\n",strlen("c:\test\32\test.c"));//计算后面字符串的长度
return 0;
}
//答案:13
//答案解析,\t 是一个字符;\32也是一个字符,表示的是作为8进制代表的那个10进制数字,作为ASCII码值,对应的字符。即将8进制的32转换为10进制为3*8+2=26。通过查表可知ASCII表中26表示的是→
//"c:\test\32\test.c"变成了
//c
//:
//\t---横向制表
//e
//s
//t
//\32---查ASCII表,可知打印出来是→
//\t
//e
//s
//t
//.
//c
//所以字符串长度一共是13