学习内容:
提示:这里可以添加要学的内容
一、 数据类型
二、 运算符与表达式
三、 指针
四、 常见C程序错误
学习时间:
提示:这里可以添加计划学习的时间
例如:
1、 周一至周五晚上 7 点—晚上9点
2、 周六上午 9 点-上午 11 点
3、 周日下午 3 点-下午 6 点
学习笔记: 一、数据类型 1.基本数据类型:
1.1 基本数据类型
字符型:char、unsigned char;
整形:int、unsigned int、short int、unsigned short int、long int、
unsigned long int;
浮点型:float、double、long double;
1.2 void
1.3 变量
1.4 字面量
1.5 const常量
1.6 标识符和名字的作用域
2.数组、字符数组、字符串 3.枚举类型 4.结构体、共用体、typedef 4.1 结构体:一个结构体变量的存储空间长度等于其所有成员所占空间长度之和
// 定义结构体Complex
// 第一个Complex可以省略
typedef struct Complex {
double re;
double im;
}Complex
// 定义结构体变量z
Complex z;
z.re = -4; z.im = 5;
4.2 共同体
一个共同体变量的存储空间的大小等于其所占用空间最大的成员的大小,所有成员变量占用同一段内存空间。
typedef union {
int i;
char ch;
float f;
}DATA;
DATA a;
二、运算符与表达式
1.自增++、自减–
2.关系运算符:==、!=、<、<=、>、>=
3.逻辑运算符:&&、||、!、
4.赋值运算符和组合赋值
5.条件运算符和逗号运算符
6.位运算符:~、&、|、^、<<、>>
7.sizeof
8.类型转换
三、指针 1.指针定义1.1 指针是内存单元(如变量、数组、函数)的地址。存储地址的变量称为指针变量,简称指针。
int *ptr1; char *ptr2;
1.2 指针对象:上面的ptr1和ptr2
指针指向的对象:ptr1和ptr2
1.3 空指针:
NULL(0,称为空指针常量);
表示指针不指向任何内存单元;
NULL可以赋值给任意类型的指针变量,以初始化指针变量。
注意:全局指针变量会被自动初始化为NULL;
int *ptr1 = NULL; char *ptr2 = NULL;
1.4 & 和 *
&:地址运算符,作用是获取变量的地址
*:间接运算符,作用是获取指针所指向的变量
1.5 指针与堆内存
a 在程序运行过程中,堆内存能够被动态地分配和释放,c程序中通过malloc(或calloc、realloc)和free函数实现。
b 例:
// 分配存放一个整型数值的堆内存块,ptr暂存该内存块的首地址 int *ptr = (int*)malloc(size of(int)); // 分配存放10个字符的堆内存块,str暂存首地址 char *str = (char*)malloc(10*size of(char)); // 将100存储在ptr指向的内存块 *ptr = 100; //将字符串“hello”复制并存储在str指向的内存块 strcpy(str,"hello"); // 释放prt及str所指向的堆内存块 free(ptr); free(str);2.指针与数组 2.1 通过指针访问数组元素
int arr[5] = {10,20,30,40};
// ptr的值为数组空间的首地址,或ptr指向arr数组的第一个元素
int *ptr = arr
2.1.1 数组arr的元素可以用ptr、(ptr+1)、*(ptr+2)来引用
2.1.2 数组名是常量指针,数组名的值不能改变,因此arr++是错误的,但是ptr++是允许的。
// 通过修改指针ptr来访问数组中的每个元素 for(ptr = arr; ptr2.1.3 二维数组
// 定义一个二维整形数组 int a[m][n]; //其中a的元素是[i][j]的内存地址 概念中:a+(i*n+j)*sizeof(int) 程序中:(&a[0][0]+i*n+j)2.1.4 通过指针访问字符串常量
char *str = "hello"; // 输出字符串“hello” printf("%sn",str); // 输出字符‘e’ printf("%sn",str[1]); // 以下运行时报错原因:str指向的是字符串常量“hello”,运行时不能被修改 str[1] = 'a'; //错误 // 如果用const进行修饰,则在编译是就检查出报错 const char*str = "hello"; str[1]= 'a';



