指针笔记总结

有人说指针是c语言最难的部分.可是,再难也得学,这可是c语言的精髓啊.其实当你真正学会了的时候感觉也就那样.别人所说的难主要是大学的从众心理,给自己的心理压力


提示:以下是本篇文章正文内容,下面案例可供参考

一、指针是什么?

所谓的指针,其实是用于存储地址的变量.

二、指针的定义

1.普通指针*p

1.定义

下面的三种写法是等价的:

int *p;
int *    p;
int* p;

上面的定义表示的是:p是一个存储地址的指针,且该地址所装的变量是一个整型变量,不可以是其他类型的变量

float *p;
float *    p;
float* p;

上面的定义表示的是:p是一个存储地址的指针,且该地址所装的变量是一个浮点型变量,不可以是其他类型的变量

2.用法*p,p,&p

int a;
int *p;
a=5;
*p=a;
//上面的两个变量的等号关系如下:
*p==a;
&(*p)==&a;
p==&a;
&p==一个地址(装该指针变量)
int a;
int *p=&a;
a=5;
//上面的两个变量的等号关系如下:
*p==a;
p==&a;
&(*p)==&a;
&p==一个地址(装该指针变量)

2.指针数组

1.定义

故名思义,指针数组就是用来装指针的数组.看这点必须先理解普通指针的用法.

int *a[3];//数组里的三个变量都是指针
int *b[2][3];//数组里的6个变量都是指针

2.用法

int *a[3];//数组里的三个变量都是指针
int *b[2][3];//数组里的6个变量都是指针
int c,d,e,f,g,h,i;
a[0]=&c;
a[1]=&d;
a[2]=&e;
int *p=&c;
//上面的变量的等号关系如下:
*a[0]==*(a[0])==c==*p;
p==a[0]==&c;
*a[1]==*(a[1])==d;
*a[2]==*(a[2])==e;
int *a[3];
int *b[2][3];
//上面的这两个定义也可以写成这样的等价形式
int *(a[3]);
int *(b[2][3]);

3.数组指针

1.定义

数组指针和指针数组是两个不同的概念,数组指针表示装数组的指针

int (*p)[3];//用来表示有3个元素的数组
int (*p1)[3][4];//用来表示含有3*4个元素的数组

2.用法

int (*p)[3];
int (*p1)[3][4];
int a[3];
int b[3][4];
p=&a;
//上面的变量的等号关系如下:
p==&a;
*p==a;
(*p)[0]==a[0];
(*p)[1]==a[1];
(*p)[2]==a[2];
int (*p)[3];
int (*p1)[3][4];
int a[3];
int b[3][4];
p=b;//没有&
//上面的变量的等号关系如下:
(*p)[0]==b[0][0];
(*p)[5]==b[1][2];
p[1][2]==b[1][2];

!!! 上面*p的括号绝对不能省,无论如何都要先给p初始化.int (*p)[3]=&a就相当于已经给p初始化了.

4.指针的数组表示

1.表示数组

首先,定义一个指针:

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

那么可以这样赋值:

*p=1;
*(p+1)=2;
*(p+2)=3;
...

也可以这样赋值:

p[0]=1;
p[1]=2;
p[2]=3;
...

2.表示变量

首先,定义一个指针:

int *p;
int a;
p = &a;

那么可以这样赋值:

*p=1;
*(p+1)=2;
*(p+2)=3;
...

也可以这样赋值:

p[0]=1;
p[1]=2;
p[2]=3;
...

还可以这样赋值

0[p]=1;
1[p]=2;
2[p]=3;
...

!!!指针变量一定要先初始化才能赋值,例如

int *p;
int a=1;
*p = a;
//上面的写法是错误的,因为指针变量还没初始化,p所指向的地址是无效的
int *p;
int a=1;
p=&a;
*p = a;
//上面的写法是正确的,指针p所指向的地址有效

5.多维指针

1.二维指针

定义:二维指针是指用来存储一级指针的地址

int *p;
int a=1;
p=&a;
//下面定义一个二维指针
int **q;
q=&p;
//上面的变量的等号关系如下
*p==a;
p==&a;
*q==p;
q==&p;
**q==a;

2.二维指针表示数组

定义:二维指针是指用来存储一级指针的地址

int *p;
int a=1;
p=&a;
int **q;
q=&p;

可以这样赋值

*(*q+0)=1;
*(*q+1)=2;
*(*q+3)=3;
...

也可以这样赋值

(*q)[0]=1;
(*q)[1]=2;
(*q)[2]=3;
...

还可以这样赋值

0[*q]=1;
1[*q]=2;
2[*q]=3;
...

3.三维指针

定义:三维指针是指装二级指针的指针

int a;
int *p;
int **q;
int ***r;
p=&a;
q=&p;
r=&q;
//上面的变量的等号关系如下
*p==a;
**q==a;
***r==a;
p==&a;
*q==&a==p;
**r==*q==p==&a;

总结

指针并不难学,主要是用法太多了.自己装个vs来多测试,才能达到最好的学习效果.上面的总结可能有不足或错误的地方,欢迎大家指正.向大家推荐c3程序员的的c语言基础课:C语言基础入门非常的适合小白.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值