简析指针

指针是用来存放地址的,某类型的变量必须存放到该类型的指针之中。如整型的一个变量a,我们需要定义一个整型的指针去存放它的地址(int *p=&a)。记住,当我们定义了一个指针以后,一定要初始化并且赋给该指针一个值(即地址),否则,容易形成野指针,导致程序出现错误。定义指针变量时,在变量前加“*”,让系统知道你定义的是一个指针。

一般我们采用(int  *p)这样的方式进行定义,当然也可以(int*  p或者int  *   p)。定义指针之后,在使用指针时就不需要再加“*”,否则表示为指针所指向的内容。(如下)

int *p;
int a=10;
p=&a;                 //只能是把地址赋给指针,不能写成p=a或者p=10;
*p=10;

二级指针,是用来存放指针的位置,我们在使用的时候要注意“*”的使用。

int a=10;
int *p=&a;         
int **p1=&p;          //此时的p为指针,不用加“*”,要注意,定义二级指针时,指针名不能与一级指针重复,此行不能更改为int **p(p已经被定义为一                       //    级指针) 

简单的说,二级指针所指向的内容,就是它所指向的一级指针所指向的内容,所以如果printf("%d",**p1),结果为10;三级指针暂不考虑,与二级指针类似。

很多人都理解数组和指针的概念,但是一旦把指针与数组结合就绕晕了,其实只要记住,数组本身就是靠指针来实现的(它们的本质都是一样的),事实上,定义一个数组时,相当于定义了数组的地址,只不过,我们是以数组首元素的地址来替代数组地址的。注意:数组地址和数组首地址是两个概念

  1 #include<stdio.h>
  2 int main()
  3 {
  4 int i,a[6]={0,1,2,3,4,5};
  5 int *p=a;                        //不用写&a,数组和指针本质一样
  6 for(i=0;i<6;i++)
  7     printf("%d\t",*(p+i));    //同理,这里可以写p[i]
  8 }

同理,我们在scanf(“%d”,a[i])时,也可以写成scanf(“%d”,a+i)。

  1 #include<stdio.h>
  2    int main()
  3    {
  4    int i,j,a[2][3]={0,1,2,3,4,5};
  5    int (*p)[3]=a;      //数组指针
  6 
  7
  8    for(i=0;i<2;i++)
  9        for(j=0;j<3;j++)
 10        printf("%d\t",*(*(p+i)+j)); //a[i][j]相当于*(*(p+i)+j)也相当于*(*(a+i)+j)
 11    }
           
注:&和*这两个过程是逆过程。一个取址,一个取值。
  






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值