指针作为函数的参数,参数传递的传指针方式,形参改变 可能 影响实参。
指针和数组
数组名保存的是数组首元素的地址,即数组名指向首地址。
指向指针的变量
所有指针变量都是占四个字节(32位),不管是一级指针,二级指针还是多级指针
1.C语言的数组表示一段连续的内存空间,用来存储多个相同类型的值。
2.数组名是数组的首元素的地址,即数组名是指向数组首元素的“指针”,
相当于指针,例如:int a[2]={1,2},a就是数组名,a等价&a[0];
不常用知识点:
两个指针相减等于两个指针指向的数组元素下标的差
两个指针不能相加,相乘,相除。可以比较大小。
3.数组名是指针常量,即数组名的值不能改变,只能指向数组的首元素。
所以不能做++,--操作,可以作为操作符运算,比如:int a[2]={1,2};
a++;× a+1;√
内存分配
静态内存分配:静态分配是在编译时由系统完成的,不占cpu资源,例如:int a[5];,程序会自动销毁内存。
动态内存分配:动态分配内存是在运行时完成的,动态内存的分配和释放需要占用cpu资源(其实就是用户自己分配存储空间大小,用完再自己销毁,系统不会自动销毁),C语言中是用malloc函数分配内存空间,c++是用new来分配内存空间。
五大内存区(堆,栈,全局、静态存储区、常量存储区和代码区)
float*pfloat=(float*)malloc(sizeof(float));
在堆栈区分配四个字节来存储float类型的数据
malloc函数返回一个指针指向分配的堆空间;
malloc函数的返回值原形为void*(,所以加上显式类型转换(void*类型可以转换任何类型的,当然,其他类型也可以转化为void*类型);
它分配的空间是没有名字的,只能通过它的地址访问,该地址保存在另外一个指针变量里,只能通过指针间接访问这块内存,而无法通过变量名访问。