C语言第六天笔记2016年01月19日(周二)A.M

1. 指针:

指针变量的值被修改,指针变量的指向也会被修改(指针变量存储了谁的地址,指针变量就指向谁)。

2. 指针变量

特点:

可以用来存储地址

值可以变化(指向可以更改)

“指向”特定类型的数据

多个指针变量可同时指向一个变量

int* p=(int )malloc(4);  // (堆空间)  释放 free(p)

野指针:

int *p; //p指向不明确的指针。

空指针:

值为null的指针 //不能对空指针进行解地址

3. 内存5大分区:(根据处理机制不同)

栈区:由系统自动分配空间,自动回收空间

遵循的原则:先进后出。

作用域:使用范围

堆区:程序猿  手动申请空间,手动释放空间//内存泄露

malloc(申请堆空间) free(释放堆空间)

new(申请堆空间) delete(C++)(释放堆空间)、、

全局数据区(静态数据区):不属于任何函数体的变量称为全局变量。程序结束时回收。

文字常量区:

存储代码区:

4. 指针和数组(重点)

指针数组:

数组名可以用于表示数组中首元素的地址  数组名不能做左值

指针加一表示指针向下移动移动一个元素

指针减一表示指针向上移动移动一个元素

两指针相减得到的是两个指针之间相差的元素个数。

数组指针:

时间: 2024-10-31 20:47:02

C语言第六天笔记2016年01月19日(周二)A.M的相关文章

C语言第七天笔记2016年01月21日(周四)P.M

1. 内存分配: C++里面使用new  delete 注意: #include <iostream> #include"stdlib.h" using namespace std; int main(int argc, char *argv[]) { int* p=new int(5); //申请了一个数组大小的堆空间,数组中的元素为int类型,元素个数为5. int* q=new int[5]; //申请了一个数组大小的堆空间,数组中的元素为int类型,元素个数为5.

C语言第五天笔记2016年01月18日(周一)A.M

1. 函数(补充,了解) 函数形参有默认值,必须自右向左依次有默认值 例:int  foo(int a,int b=1,int c=2){ return a+b+c;}//合法 int  foo(int a=1,int b,int c=2){ return a+b+c;}//不合法 内联函数:声明时使用inline关键字(并不一定所有的编译器都支持内联函数). 内联函数:在编译之前,编译器会用函数体替换函数调用语句,执行时,省去了“寻找函数实现”的时间.是一种用空间换时间的操作 普通函数:程序运

C语言第五天笔记2016年01月18日(周一)P.M

1. 指针 int a=10; int *p; p=&a; *p=a;//p=&a;未添加之前 *p指针未初始化 printf("%d\n",*p); 同类型声明: int a, * p,** q;

C语言第三天笔记2016年01月14日(周四)P.M

1. 二维数组: 例:int a[5][6] :5行6列 在物理内存中存储时,以一位数组的形式存放. 注:初始化时行数可省,列不能空,数组名不可赋值 2. continue:结束本次循环  即直接返回至判断条件 while: 使用条件内的数字初始化数组元素. break:跳出整个循环 3. 函数:用来实现指定功能的代码模块. 函数返回值的个数最多有一个 函数声明:return-type function-name(argument declarations); 返回值类型 函数名(参数列表) 函

C语言第三天笔记2016年01月14日(周四)A.M

1. while循环:当型循环 先执行判断条件,循环体可能一次都不会执行 do-while循环:直到型循环 先执行循环体后判断条件,循环体至少会执行一次. 2. for循环: for (expr1; expr2; expr3) statement //循环体 expr1:初始化循环控制变量(可选) expr2:循环判断条件(可省)若省略判断条件永真,有可能导致死循环 expr3:修改循环控制变量(可省) 在循环结构中,必须有修改循环控制变量的操作. break:退出整个循环 练习:9*9乘法表

C语言第八天笔记2016年01月22日(周五)A.M

1. 作用域: 静态全局变量与普通全局变量:前者的作用域缩小,生命周期相同. 静态局部变量与普通局部变量:前者的生命周期延长,作用域相同. 2. 函数指针: int (*func_ptr)(int,float*);//声明函数指针. int exchange(int,float*); exchange(1,p); func_ptr(1,p); 3. 数组指针.指针数组 指针数组:char* s[10]; int* a[10];(数组,数组中的元素都是指针类型). 数组指针: int* p;//整

C语言第九天笔记2016年01月25日(周一)P.M

1. 结构体 成员如果是char* name;能否使用gets.scanf.strcpy取决于name是否“指向”一块可以盛放字符串的空间,成员是数组,数组名不可以做左值. COMPUTER* p; p=&c; p->brandó(*p).brand .成员访问运算符 //结构体变量名.成员:c.brand; ->指向运算符:指针变量名->成员; //访问指针所“指向”的结构体变量的成员 2. 宏定义 基本格式:#define 宏的名字 宏替换内容 3. 预处理命令 #if 0

C++第六天笔记2016年02月23日(周二)A.M

1.    赋值运算符的重载: 什么情况下需要赋值运算符的重载? 当类中有指向对空间的指针变量时,需要重载赋值运算符以实现深拷贝. 浅拷贝问题: 当类中有指向对空间的指针变量时,前拷贝有可能会导致二次删除或内存泄露问题. 重载赋值操作符分5步:a=a; 1.1  判断是否为自赋值à自赋值则直接跳至第5步. 1.2  删除旧的堆空间(指针指向的旧的堆空间) 1.3  申请新的堆空间 1.4  内容拷贝 1.5  return* this; 浅拷贝: 1 #include <iostream> 2

C++第二天笔记2016年01月27日(周三)P.M

1.  Point(Point p,int r):p(_p){} 对象p  p.print();//代码复用调用Point中的打印函数 2.  对象成员变量,没有显示使用初始化列表做初始化,编译器依旧会自动调用成员变量所属类中的构造函数(默认构造)对对象成员变量进行初始化. 3.  const: const修饰函数时,只能修饰类的成员函数. const成员函数体内 不能修改成员变量的值 const成员函数体内只能调用const成员函数 const对象只能调用const成员函数 4.  析构函数: