c语言基本常识5

来源:互联网 发布:淘宝大学证书 编辑:程序博客网 时间:2024/04/29 17:03

指针作为函数的参数,参数传递的传指针方式,形参改变  可能  影响实参。


指针和数组

数组名保存的是数组首元素的地址,即数组名指向首地址。
指向指针的变量

 

所有指针变量都是占四个字节(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*类型);

它分配的空间是没有名字的,只能通过它的地址访问,该地址保存在另外一个指针变量里,只能通过指针间接访问这块内存,而无法通过变量名访问。

1 0
原创粉丝点击