一、指针作用 通过它找到以它为地址内存单元。 二、按值传递 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; |
|
来自: thchen0103 > 《06.01-06.30》