2016年06月12日学习日记c语言指针
2016-06-15 09:50
411 查看
2016年06月12日学习日记c语言指针
多级指针
数组和指针:数组名是指针常量 数组名就是一个指针
指针数组:数组元素是指针
数组指针:指针指向一个数组
参数:数组、指针(一般用指针)
内存分配两种形式:
1、静态内存分配:系统编译时自动分配空间、分配和回收空间由系统完成
2、动态内存分配::程序运行时分配空间、分配空间和回收空间由程序猿完成
1、栈:局部变量、形式参数 由编译器来完成开辟和释放
2、堆:malloc new出来空间 完全由程序猿管理(开辟大小,释放时间)
3、常量区:const 由编译器来完成开辟和释放
4、全局/静态存储区:全局变量(不定义在任何一个函数内的变量)/static变量
注意:全局变量变异开辟内存,程序结束释放内存,内存的释放不会受到任何一个函数的影响
5、代码区:
malloc:
void * malloc(size_t size) size_t :unsigned long
void * :空指针,使用时需要做类型转换
size_t size:要开辟的空间大小 byte
如果成功、堆上开辟一块哦那个贱,失败返回NULL
malloc开辟出来的空间没有名称,通过指针使用堆空间,所以返回的是一个空指针而不是void
mallow一定和free成对出现
常量与指针
常量指针(字符串):不能通过指针修改指针所指向的变量的值。但是指针可以指向别的变量。
指向常量的指针(指针常量)(数组):指针常量的值不能被修改,即不能存一个新的地址,不能指向别的变量。但是可以通过指针修改它所指向的变量的值。
引用:就是给变量起一个别名 某某某;狗蛋儿
声明时必须对引用进行初始化 &
常量引用:const int &j = i;常量引用(j)不能修改引用的值,但引用指向的便来给你(i)值自身可以做修改
变量的作用域:文件域(整个文件)、函数域(函数内部)、语句块域
block或者函数中访问文件域变量用’::’
c语言中 可以出现相同名称的标识符(只要作用域不同即可)
链接extern:把多文件合并成一个可执行文件
静态局部变量:局部变量声明时加static关键字 内存与函数无关(函数结束静态局部变量内存依然存在)多次调用不会重新被初始化、值使用上次保留值(变量值只会被初始化一次)
静态局部变量作用域和普通局部变量相同(只能在该函数中使用)
静态局部变量存储在静态存储区:程序结束释放内存、自动
与普通局部变量相比较:作用域不变、生命周期延长
静态全局变量:
和普通全局变量比:
作用域被缩小,仅在当前目标文件下可使用(不能通过extern来进行引用);生命周期不发生改变

传參:值、指针、引用(形參就是实參的一个别名)
函数返回值:值、指针、引用(返回值就是函数中返回值的一个别名)
当函数传值返回,编译器会返回变量创建一个临时变量涌来当返回值(即使局部变量内存释放,临时变量内存依然还存在)
函数不能返回指向局部变量的指针或引用,以防野指针
函数指针:一个指针指向一个函数
声明方法:返回值类型(*指针变量名)([形參列表])//int (*fun)(int x,int y);
指针函数:一个函数的返回值是一个指针 //int *func(int x);
void*指针:空指针类型
空指针类型可以转型为其他指针类型,但其他类型指针不能转换成空指针类型不能对空指针类型进行解引用
多级指针
数组和指针:数组名是指针常量 数组名就是一个指针
指针数组:数组元素是指针
数组指针:指针指向一个数组
参数:数组、指针(一般用指针)
内存分配两种形式:
1、静态内存分配:系统编译时自动分配空间、分配和回收空间由系统完成
2、动态内存分配::程序运行时分配空间、分配空间和回收空间由程序猿完成
1、栈:局部变量、形式参数 由编译器来完成开辟和释放
2、堆:malloc new出来空间 完全由程序猿管理(开辟大小,释放时间)
3、常量区:const 由编译器来完成开辟和释放
4、全局/静态存储区:全局变量(不定义在任何一个函数内的变量)/static变量
注意:全局变量变异开辟内存,程序结束释放内存,内存的释放不会受到任何一个函数的影响
5、代码区:
malloc:
void * malloc(size_t size) size_t :unsigned long
void * :空指针,使用时需要做类型转换
size_t size:要开辟的空间大小 byte
如果成功、堆上开辟一块哦那个贱,失败返回NULL
malloc开辟出来的空间没有名称,通过指针使用堆空间,所以返回的是一个空指针而不是void
mallow一定和free成对出现
#include <stdlib.h> void func() { float num1=10.5f;//栈 float *pt=(float *)malloc(sizeof(float));//堆上开辟空间 *pt=100; free(pt);//释放内存,不能再释放了 pt = NULL;//让他指向空之后再不小心free(pt)了就不会报错了 free(pt); //注意:free(pFloat)是释放指针所指向的堆空间,而不是指针变量本身,那么指针pFloat将会变回野指针,所以应将该指针置空,是程序员的一个好习惯。 }
常量与指针
常量指针(字符串):不能通过指针修改指针所指向的变量的值。但是指针可以指向别的变量。
int a=5; const int *p=&a; 或者char const*p=&a; *p = 20;//error不能通过指针修改指向的变量的值 int b =10; p = &b;//ok指针可以指向别的变量
指向常量的指针(指针常量)(数组):指针常量的值不能被修改,即不能存一个新的地址,不能指向别的变量。但是可以通过指针修改它所指向的变量的值。
int a = 5; int * const p=&a; *p = 20;//可以通过指针修改所指向的变量的值 int =10; p=&b;//指针不能指向别的变量 // 谁在前谁不可变
引用:就是给变量起一个别名 某某某;狗蛋儿
声明时必须对引用进行初始化 &
常量引用:const int &j = i;常量引用(j)不能修改引用的值,但引用指向的便来给你(i)值自身可以做修改
变量的作用域:文件域(整个文件)、函数域(函数内部)、语句块域
block或者函数中访问文件域变量用’::’
c语言中 可以出现相同名称的标识符(只要作用域不同即可)
链接extern:把多文件合并成一个可执行文件
静态局部变量:局部变量声明时加static关键字 内存与函数无关(函数结束静态局部变量内存依然存在)多次调用不会重新被初始化、值使用上次保留值(变量值只会被初始化一次)
静态局部变量作用域和普通局部变量相同(只能在该函数中使用)
静态局部变量存储在静态存储区:程序结束释放内存、自动
与普通局部变量相比较:作用域不变、生命周期延长
静态全局变量:
和普通全局变量比:
作用域被缩小,仅在当前目标文件下可使用(不能通过extern来进行引用);生命周期不发生改变

传參:值、指针、引用(形參就是实參的一个别名)
函数返回值:值、指针、引用(返回值就是函数中返回值的一个别名)
当函数传值返回,编译器会返回变量创建一个临时变量涌来当返回值(即使局部变量内存释放,临时变量内存依然还存在)
函数不能返回指向局部变量的指针或引用,以防野指针
函数指针:一个指针指向一个函数
声明方法:返回值类型(*指针变量名)([形參列表])//int (*fun)(int x,int y);
指针函数:一个函数的返回值是一个指针 //int *func(int x);
void*指针:空指针类型
空指针类型可以转型为其他指针类型,但其他类型指针不能转换成空指针类型不能对空指针类型进行解引用
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- 如何写好 C main 函数
- Lua和C语言的交互详解
- C# Pointer指针应用实例简述
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C和指针小结(推荐)
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方