所以知识点到为止,不做详细介绍!
1数据类型
char 字符数据类型 short 短整型 int 整形 long 长整型 long long 长长整形 float 单精度浮点数 double 双精度浮点数 C语言标准规定: sizeof(long long)> =sizeof(long)> =sizeof(int)
- %d-有符号整行整型(十进制)
- %c- 打印字符
- %f-打印浮点数字-打小数
- %p-以地址的形式打印
- %x-打印16进制数字
- %o--打印8进制
- %s-打印字符串
- %lf--打印double类型
- %u - 无符号整形 -unsigned
注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。
比如:
char name[] = 'xiaoming' ;
int weight = 120 ;
int age = 20 ;
2. 变量、常量
生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)。
2.1 定义变量的方法
1.int age = 150; float weight = 45.5f; cname = 'xiaoming';
2.2 变量的命名
- 只能由字母(包括大写和小写)、数字和下划线( _ )组成。
- 不能以数字开头。
- 长度不能超过63个字符。
- 变量名中区分大小写的。
- 变量名不能使用关键字。
2.3 变量的分类
- 局部变量
- 全局变量
1.#include <stdio.h> int a = 2023;//全局变量 int main() { int b = 2023;//局部变量 //下面定义的a会不会有问题? int a = 2020;//局部变量 printf("a= %d\n",a ); return 0; }
上面的局部变量a变量的定义其实没有什么问题的!
当局部变量和全局变量同名的时候,局部变量优先使用!!
2.4 变量的作用域和生命周期
作用域
作用域( scope )是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效 / 可用
的而限定这个名字的可用性的代码范围就是这个名字的作用域。
1. 局部变量的作用域是变量所在的局部范围。就是在创造的{ }之内可以使用
2. 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
2. 全局变量的生命周期是:整个程序的生命周期。
2.5 常量
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:
- 字面常量
- const 修饰的常变量
- #define 定义的标识符常量
枚举常量
#include <stdio.h> //举例 enum Sex { MALE, FEMALE, SECRET }; //括号中的MALE,FEMALE,SECRET是枚举常量 int main() { //字面常量演示 3.14;//字面常量 1000;//字面常量 //const 修饰的常变量 //const修饰的常变量不能变 const float a = 3.14f; //这里的a是const修饰的常变量 pai = 5.14;//是不能直接修改的! //#define的标识符常量 演示 #define MAX 100 printf("max = %d\n", MAX); //枚举常量演示 printf("%d\n", MALE); return 0; }
- 那什么是常变量
const 修饰的常变量在C语言中只是在语法层面限制了变量 num 不能直接被改变,但是 num 本质上还是一个变量的,所以叫常变量。
3. 字符串+转义字符+注释
3.1 字符串
"hello XMLife.\n"
这种由双引号( Double Quote )引起来的一串字符称为字符串字面值( String Literal ),或者简称字符
串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串
#include <stdio.h> //下面代码,打印结果是什么?为什么?(突出'\0'的重要性) int main() { char arr1[] = "XMLife"; char arr2[] = {'x', 'm', }; char arr3[] = {'x', 'm', '\0'}; printf("%s\n", arr1); printf("%s\n", arr2); printf("%s\n", arr3); return 0; }
字符串是遇到\0结束的
在arr1里面隐藏着一个\0所以打印了XM
在arr2里并不存在\0,xm后他会继续向后查找,直到遇到\0结束,所以arr2是个随机值
在arr3里,xm后面放着一个\0,所以遇见\0就会结束,打印了xm
4. 数组
数组是有序的元素序列。 [1] 若将有限个类型相同的变量的集合命名,那么这个名称为数组名
4.1 数组定义
int arr [ 10 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }; // 定义一个整形数组,最多放 10 个元素
4.2 数组的下标
C语言规定:数组的每个元素都有一个下标
下标是从0开始的。 数组可以通过下标来访问的。
比如:
int arr [ 10 ] = { 0 };
// 如果数组 10 个元素,下标的范围是 0-9
4.3 数组的使用
#include <stdio.h> int main() { int i = 0; int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int sz = sizeof(arr)/sizeof(arr[0]);//计算该数组有几个元素 for(i=0; i<sz; i++) { printf("%d ", arr[i]); } return 0; }
5. 指针
5.1 内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是 1 个字节 。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该 内存单元的地址
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
取出变量地址如下:
#include <stdio.h> int main() { int num = 10; //把num的地址取出来 //这里num的4个字节,每个字节都有地址 //取出的是第一个字节的地址 (较小的地址) # //int* 是个指针变量 //*是个指针 //int 代表p指向的num是个int类型 int* p = # printf("%p\n", &num);//打印地址,%p是以地址的形式打印 printf(“%d\n”,*p);//打印*p指向的a return 0; }
那地址如何存储,需要定义指针变量。
int num = 10;
int *p;//p为一个整形指针变量
p = &num ;
指针的使用实例:
#include <stdio.h> int main() { int num = 10; int *p = # *p = 20; return 0; }