您的位置:首页 > 编程语言 > C语言/C++

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成对出现

#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*指针:空指针类型

空指针类型可以转型为其他指针类型,但其他类型指针不能转换成空指针类型不能对空指针类型进行解引用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息