分享

C/C++语言精华《指针》

 thchen0103 2017-06-04

一、指针作用

通过它找到以它为地址内存单元。

二、按值传递

C语言当中函数调用是按值传递,传入参数在子函数中只是一个初值相等的副本,无法对传入参数作任何发动。但实际编程,经常要发动传入参数的值。这一点我们可以用传入参数的地址而不是参数的本身,当对传入参数(地址)取(*)运算时,就可以直接在内存中修改,从而改动原想作为传入参数的参数值。

编程实战(参数值):

C/C++语言精华《指针》

请点击此处【C语言】学习交流群:379249575

三、指针本身所占据的内存区

指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测出来。在32位平台里,指针本身占据4个字节。

编程实战测试指针占据内存空间:

四、野指针

野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NULL避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进程操作很容易造成程序错误。

野指针主要是因为定义指针时疏忽一些工作来出现?指针变量未初始化、指针释放之后未置空值、指针操作超越变量作用域

野指针的危害是可以降低?

初始化时置为NULL、释放时置NULL

五、指针运算符

指针运算符是一种计算机运算符,在C/C++中有两个非常关键关于指针的运算符:

&运算符:取地址运算符,&x即是变量x在内存中的实际地址。

*运算符:指针运算符,它返回其操作数所指向的对象的值。

六、指针数组和数组指针

指针数组:即用来存储指针的数组,也就是数组元素都是指针。

数组指针:即指向数组的指针。

声明时要注意他们用法的区别:

int *a[10]; //指针数组

表示:数组a中的元素都为int型指针

元素表示:*a[] *(a[i])是一样的,因为[]优先级高于*

int (*a)[4]; // 数组指针

表示:指向数组a的指针

元素表示:(*a)[i]

注意:在实际应用编程当中,对指针数组,可以这样定义:

typedef int *pInt;

pInt a[10];

上面指针数组定义所表达意思是一样的,只不过是采用类型变换。

编程实战:

七、指针函数

指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针:

类型标识符 *函数名(参数表)

比如 float *Fun(int x,int y)

表示:

float *Fun(); float *p; p=fun();

当一个函数声明其返回值为一个指针时,实际上就是是返回一个地址给调用函数,以用于需要指针或地址的表达式中。

编程实战:

八、函数指针

是指向函数的指针变量,即本质是一个指针变量。

指向函数的指针包含了函数的地址,可以通过它来调用函数 。声明语法格式如下:

类型说明符 (*函数名)(参数)

其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型的函数。

例如:void (*FunPtr)();

把函数的地址赋值给函数指针:

FunPtr=&Funtion;

FunPtr=Funtion;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多