指针应用场景
- 交换两个变量的值
- 函数返回多个值,某些值就只能通过指针返回(传入的参数实际上是需要保存带回的结果的变量 )
- 函数返回运算的状态,结果通过指针返回
#include <stdio.h> int divide (int a,int b,int *result); int main(void) { int a=5; int b=2; int c; if(divide(a,b,&c)) { printf("%d/%d=%n",a,b,c); } return 0; } int divide (int a,int b,int *result) { int ret = 1; if(b==0) ret = 0; else { *result = a/b; } return ret; }
指针运算符&*
- 相互反作用
(1)*&yptr -> * (&yptr) -> * (yptr的地址) -> 得到地址上的变量 -> yptr
(2).&*yptr -> &(*yptr) -> &(y) -> 得到y的地址,也就是yptr -> yptr
指针与数组
- 函数参数表中的数组实际上是指针(数组变量是特殊的指针)
以下四种函数原型是等价的:int sum(int *ar,int n); int sum(int *,int n); int sun(int ar[],int n); int sum(int [],int);
常量指针与指针常量
- 常量指针。
常量是形容词,指针是名词。常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针。
(1)const int *p;
(2)int const *p; - 指针常量。
指针是形容词,常量是名词。指针常量的本质是一个常量,而用指针修饰它,那么说明这个常量的值应该是一个指针。
int *const b = &a; - 常量指针与指针常量区分
const在*前为常量指针
const在*后为指针常量