提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
从0学起的C语言笔记
提示:以下是本篇文章正文内容,下面案例可供参考
一、C数据类型及语句
C语言特点
//这是我的第一个C语言程序
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
- #include <stdio.h>头文件必须要包含的,意思是standard input and output Library file
- 每一个C语言程序中有且只有一个main函数,这是整个程序的开始
- C语言中所有的{},(),“”,’'都是成对出现的
- C语言中语句必须要以 “;” 结束。
- //为单行注释,/* */为多行注释
关键字
数据类型相关的关键字
用于定义变量的或者类型
类型 变量名;
char、short、int、long、float、double、struct、union、enum、signed、unsigned、void
-
char 字符型
用char定义的变量是字符型变量,占用一个字节。
char ch = ‘a’; -
short 短整型
使用shout类型定义的变量是短整型变量,占用两个字节。
short int a = 11;
-32768 ~ +32767 -
int 整型
用 int 定义的变量是整型变量,在32为系统下为4个字节,16为系统下为2个字节。
int a = 44; -20亿 ~ 20亿 -
long 长整型
用 long 定义的变量是长整型的,在32位系统下占用4个字节
long int a = 66; -
**float 单精度浮点型(实数) **
用 float 定义的变量是单浮点型的实数,占用4个字节
float a = 3.8f; -
double 双精度浮点型(实数)
用double定义的变量为双浮点型的实数,占用8个字节
double a = 3.8; -
struct 这个关键字是与结构体相关的可以用它来定义结构体
-
union 这个关键字是与共用体(联合体)相关的关键字
-
enum 这个关键字是与枚举类型有关的的关键字
-
signed 有符号(正负)的意思
在定义char short int long 数字据的时候可以加上signed修饰,代表他们可以为正也可以为负
signed int a = 10;
signed int a = -10; -
unsgned 无符号
-
void 空类型的关键字
char、int、float都可以定义变量,void 不能定义变量,没有void类型的变量
void 用来修饰函数的参数或者返回值,代表没有返回值
例:
void fun(){}
代表fun()没有返回值,没有参数
一般数据类型的存储
char ch = ‘a‘; // 占用一个字节 存储的是97*
0110 0001
字节:在计算机中它是内存的基本单位,8位为1个字节。字符型数据在计算机中不是存储本身,而是他的ASCII码值。整型变量存储的是其数值的二进制
负数在内存中的存储
原码 | 反码 | 补码
规定
正数的原码反码,补码相同
5
0000 0101
负数:
-5
原码:1000 0101
反码:1111 1010
补码:1111 1011 (反码+1)
#include <stdio.h>
int main()
{
int a = -5;
printf("%d\n",a);
printf("%x\n",a);
return 0;
}
输出为
测试基本类型在内存中占据的字节数
#include <stdio.h>
int main()
{
char a = 'a';
short int b = 10;
int c;
long int d;
float e;
double f;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(b));
printf("%d\n",sizeof(c));
printf("%d\n",sizeof(d));
printf("%d\n",sizeof(e));
printf("%d\n",sizeof(f));
return 0;
}
存储相关的关键字
register、ststic、const、auto、extern
- register 是寄存器的的意思,用 register 修饰的变量是寄存器变量
即:在编译的时候告诉编译器这给变量尽量把其存储空间分配在寄存器中。
注意:
(1):定义的变量不一定真的存放在寄存器中。
(2):CPU 取数据时从寄存器中去拿数据比从内存中取数据快
(3):因为寄存器数据宝贵,所以没有寄存器数组
(4):register 只能修饰 字符串及整型的,不可以修饰浮点型
(5):因为 register 修饰的变量可能存放在寄存器不存放在内存中,左移能对寄存器变量取地址。因为只能存放在内存中的数据才有地址register char ch; register short int b; register int c; register float d; //错误
register int a; int *p; p = &a; //错误,a 可能没有地址
- ststic 是静态的意思
static 可以修饰全局变量,局部变量,函数 - const
const 是常量的意思
用 const 修饰的变量名,是只读变量,一般的手段不可以随意修改
const 可以修饰指针const int a = 101; //在定义时用const修饰 并赋予初始值101 //从此以后 a 不可以再赋值
- auto 基本不用
- extern
外部的意思,一般用于函数和全局变量的声明
控制语句相关的关键字
if、else、break、continue、for、while、do、switch、case、goto、default
其他关键字
sizeof、typedef、volatile
- sizeof
是用来测变量,数组的占用空间的大小(字节)int a = 10; int sum ; num = sizeof(a);
- typedef
重命名相关的关键字
Unsigned short int a = 10;
u16
关键字,作用是给一个已经有的类型,重新起一个新的名字,**不是创造一个新的类别
INT16 U8就是用typedef定义出来的新的类型名,其实一般也就是short int 和 unsigned char的别名INT16 a; U8 ch; INT32 b;
typedef起别名的方法- 用想起名的类型定义一个变量
short int a;
- 用新的类型名代替变量名
short int INT16;
- 在最前面加typedef
typedef short int INT16;
- 就可以使用新的类型变量名了
例如:INT16 b; short int b; // 是同一个效果
#include <stdio.h> //short int b; //short int INT6; typedef short int INT16; int main() { short int a = 101; INT16 c = 111; printf("a = %d\n",a); printf("c = %d\n",c); return 0; }
- volatile
用 volatile 告诉 CPU 每次使用带有 volatile 变量的时候,重新去内存中取,保证每次用的都是最新的值,而不是寄存器中的备份的值
volatile int a = 10;
命名规则
变量由字母、数字,下划线组成
必须以字母、或下划线开头
例如
int a2;//正确的
int a_2;//正确的
int _b;//正确的
int 2b;// 错误的
int $a2;//错误的
数据类型
基本类型
char 、short int 、int、long int、float、double
构造类型
概念:由若干个相同或不同类型数据构成的集合,这种数据类型被称为构造类型
例:int a[10];
数组、结构体、共用体、枚举
扩展:常量和变量
常量:在程序运行过程中,其值不可以改变的量
类型 | 举例 |
---|---|
整型 | 100,125,-100,0 |
实型 | 3.14, 0.125f,-3.752 |
字符型 | ’a‘、’b‘、’2‘ |
字符串 | ’a‘、’acb‘、’1232‘ |
ASCII 码
#include <stdio.h>
int main(int argc, char *argv[])
{
unsigned int i;
for(i=0;i<=255;i++)
{
printf("%d %c ",i,i);
if(i%10==0)
printf("\n");
}
return 0
}
整型数据
整型常量
进制类型 | 解释 |
---|---|
十进制 | 以1-9开头,如1234、1302 |
八进制 | 以0开头,如0124 |
十六进制 | 以0x开头,如0x1e |
整型变量
类型 | 占用存储 |
---|---|
有/无符号短整型(un/signed) | 2个字节 |
有/无符号整型(un/signed) | 4个字节 |
有/无符号长整型(un/signed) | 4个字节 (32位处理器) |
实型数据
实型常量
实型常量也可称为实数和浮点数
十进制形式:由数字和小数点组成;如0.12、0.31、12.34
指数形式:123e3代表123*10的三次方。
- 不以 f 结尾的常量是 double 类型
- 以 f 为结尾的常量是 float 类型,如 3.14f
实型变量
单精度(float)和双精度(double)3.1415626
- float 型:占用4个字节,7位有效数字
- double型:占用8个字节,16位有效数组
字符数据
字符常量
直接常量:用单引号括起来的,如:‘a’、’b‘、’1‘等
转义字符:用反斜杠 “ \ ” 开头,后面加几个字母,如 ‘ \t ’、‘ \n ’
字符变量
用 char 定义,每个字符被分配一个字符的内存空间
字符值以 ASCII 码的形式被存储再变量的内存呢单元中;
#include <stdio.h>
int main()
{
char a = 'x';
char b = 120;
printf("a = %c\n", a);
printf("b = %c\n", b);
return 0;;
}
字符串常量
是由双引号括起来的字符序列,如 " CHINA "、“嘿嘿嘿”、"C_data"都是合法字符串
字符串常量与字符常量不同
’ a ’ 为字符常量,“a"为字符串常量
每个字符串的结尾,编译器都会加上” \0 ", 即 ”a“ 包含两个字符 ‘ a ’ 和 ‘\0’
格式化输出字符:
常用占位符
- %d 十进制有符号整数 %u 十进制无符号整数
- %x, 以十六进制表示的整数 %o 以八进制表示的整数
- %f float 型浮点数 %lf double 型浮点数
- %e 指数形式的浮点数
- %s 字符串 %c 单个字符
- %p 指针的值
特殊应用
%3d %03d %-3d %5.2f
- %3d:要求宽度为 3 位,如果不足 3 位,前面空格补齐;如果足够 3 位,此语句无效
- %03d:要求宽度为 3 位,如果不足 3 位,前面 0 补齐;如果足够 3 位,此语句无效
- %-3d: 要求宽度为 3 位,如果不足 3 位,后面空格补齐;如果足够 3 位,此语句无效
- %.2f:小数点后只保留 2 位