指针的使用

Posted 天行健,君子以自强不息

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针的使用相关的知识,希望对你有一定的参考价值。

学习链接:

http://www.icourse163.org/learn/ZJU-200001?tid=1002316004#/learn/content?type=detail&id=1003086473&cid=1003636045

指针的应用场景

1.交换两个变量

2.函数返回多个值,某些值就只能通过指针返回

  传入的参数实际上是需要保存带回的结果的变量

3.函数返回运算的状态,结果通过指针返回

传入函数的数组成了什么?

函数参数表中的数组实际上是指针

  sizeof(a)=sizeof(int *)

但是可以用数组的运算符[]进行运算

数组参数

以下四种函数原型是等价的:

int sum(int *ar, int n)

int  sum(int *,int)

int sum(int ar[], int n)

int sum(int [],int)

数组变量是特殊的指针

数组变量本身表达地址,所以

  int a[10]; int *p=a;

  但是数组的单元表达的是变量,需要用&取地址

  a==&a[0]

[]运算符可以对数组做也可以对指针做:

  p[0]<==>a[0]

*运算符可以对指针做,也可以对数组做

  *a=25

数组变量是const的指针,所以不能被赋值

int a[] -->int * const a

指针与const

指针是const 表示一旦得到某个变量的地址,不能在指向其他的变量

  int * const q = &i ;

  * q =;26;

  q++;

表示不能通过这个指针去修改那个变量(并不能使得那个变量成为const)

  const int * p= &i;

  *p = 26;error

  i = 26;ok

  p=&j ;ok

转换

1.总是可以把一个非const的值转换成const的

2.当要传递的参数的类型币地址的时候,这是常用的手段:既能用比较少的字节数传递给参数,又能避免函数对外面的变量的修改

const数组

const int a[]={1,2,3}

数组变量已经是const的指针了,这里的const表明数组的每个单元都是const int

所以必须通过初始化进行赋值

保护数组值

因为把数组传入函数时传递的是地址,所以函数内部可以修改数组的值

为了保护数组不被函数破坏,可以设置参数为const

  int sum (const int a[], int length);

 

以上是关于指针的使用的主要内容,如果未能解决你的问题,请参考以下文章

为什么要使用指针,指针定义, 指针的初始化访问,空指针和坏指针,指针的算术运算

我的改错日常----指针的使用

C 语言数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )

李连杰的二级指针,二级指针的用途,多级指针的定义使用,数组与指针的区别,void 类型指针,引用

[ C语言 ] 还不懂指针的一定要进来,带你初识指针,简单使用指针,它没有你想的那么难。

[ C语言 ] 还不懂指针的一定要进来,带你初始指针,简单使用指针,它没有你想的那么难。