指针的形式与动态存储分配

来今天咱们今天先不讲题目和算法,我们先来讲一讲一个很重要的基础

第一个就是指针,这里就会有人会说了指针不就是字母前面加了个*号吗,有什么难的。嗯的确是在字母前加了个星号,但没弄懂确实特别难,但只要弄懂了就是炒鸡简单的东西了,而且还能拿来自己运用!

好了废话不多说,咱们开造。

使用的规则就是    * 指针变量名;(*取内容运算符自右向左

当我们的指针碰上了数组,那真是个奇妙的组合。

有个潜规则:数组自带地址(这个要牢记!!!)

来看我们的一维数组与指针

先定义一个数组                                                                                                                          int a[10];        //定义一个一维数组

int *p;            //定义一个指向int型的指针变量p

p=&a[0];        //取数组元素a[0]的地址,p指向第一个元素(也可以这么表达p=a[])

p=a;              //数组名代表数组首地,p指向第一个元素                                                         

一维数组就这么多,并不复杂                                                                                                  

二维数组与指针

我们通过一个我上课老师分享的一个总表达

二维分为行和列所以就有行地址与列地址

行地址:(a是定义好的数组)

a+i 表示的意思是指向第i行      

(*p1)[m]=a ;

p1+i; 表示指向第i行

                                                                                                                                                  

列地址:下面表示的都是   i行j列

a[i][j]      a[i]+j     *(a+i)+j    (*(a+i))[j]     

{

*p2=a[0];

p2++;         //明显的让数组指针“动起来”

p2+sizeof(int)*i+j;   // 可以不用记住这个

}

上面就是基本上我们常用的数组的指针表达方式了。

第二个就是我们的动态存储分配

这个是用户在程序执行过程中,根据自己的需要来临时向系统申请分配存储单元空间。这种储存方式可以通过C语言的库函数来实现分别是:malloc,calloc,free,realloc.

这四个库函数是在头文件"stdlib.h"

1、malloc:

原型为 void*malloc(unsigned int  size)

功能:在内存的动态储存区中分配一个长度(字节数)为size的连续空间。返回值是一个指针,指针类型是void*,指针值为已分配空间的起始地址。若动态存储中没有足够的空间单元分配,则返回NULL(空指针)

重点:在调用该函数时必须要用强制类型转换运算符将void*转换为所需要的类型(下面我来展示一下)

例子:

short *px;

float *pf;

px=(short *)malloc(2);       //可以替换成px=(short *)malloc(short)  用户可以不用自己知道类型

pf=(float*)malloc(4);          //可替换成pf=(float*)malloc(float)           的字节数

if(px!=NULL)

*px=3;

if(pf!=NULL)

*pf=4.5;      

当指针变量当pf与px没有被赋值所以对应的指针变量是不能赋值的!!

                                                                                            

2、calloc

原型:void *calloc( unsigned int n,unsigned int size)

功能:给n个同一类型的数据项(大小均为size)分配一块连续的存储空间(n*size),若分配成功,则函数返回该存贮空间的指针,指针类型为void*,指针值为该空间首地址;若分配失败,则返回NULL空指针。 

重点:由calloc函数所分配得到的无名数组中的每一个元素,系统将自动赋初始值为0

           同样要将其利用强制类型转换运算符将void*转换为所需要的类型。

3、free

原型:void free(void* ptr)

功能:指针变量ptr指向一个要释放内存的内存块,该内存块之前是通过调用malloc,calloc或realloc函数进行内存分配的。没有返回值。

只用执行

例如:free(pf)

凡是使用过malloc和calloc的一定要通过free释放空间要不然会造成内存泄漏,导致程序运行速度减慢甚至系统崩溃的后果。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值