C语言——指针

一、定义:

存储类型  数据类型 *指针变量名

存储类型:auto(默认),register,static,extern

数据类型:由基本数据类型(int,char,short,long,float,double)+ *构成,代表指针所指向 的数据的数据类型   eg:int *p表示p指针指向的是一个int型的数据。

指针变量名:标识符(由字母,数字,下划线组成,不能以数字开头,不能与关键字重名)

指针变量:是一个变量,存放的是一个地址常量。

二、初始化:

1)指向整型:int a=0;int *p=&a(&表示取地址),把a的地址赋值给p

(2)指向字符型:char a='s'; int *p=&a

(3)指向数组:int a[3]={1,2,3}; int *p=a;a是数组名,本身就是地址常量,其值为数组首地址的值,代表的是整片数组空间,不需要用&对其取地址。int *p=&a[0],a[0]代表数组的第一个元素,所以需要用&对其进行取地址。

三、赋值:

(1)int a=0;  int *p=NULL; p=&a;

(2)char a='s';  int *p=NULL;p=&a;

(3)int a[3]={1,2,3};  int *p=NULL;  p=a; p=&a[0]

注意:在定义指针变量时,如果不知道其接下来需要指向哪儿,不想对其进行初始化时,请初始化为NULL,NULL地址空间不允许被用户访问,可以避免后续指针变量指向不明所带来的段错误。

 四:指针的运算:(通过间接访问的方式操作变量的值)

 int a=0;

int *p=&a;

*p=2; (*表示取值,p此时指向a的地址,*p就代表a的值,将2赋值给*p等于将2赋值给a)

 五:指针变量的运算:(对地址进行偏移,改变指针的指向)

p++;   //指针向高地址偏移一个数据类型单位     p = p +1*(数据类型单位)
p--;     //指针向低地址偏移一个数据类型单位 
p+N;   //指针向高地址偏移N个数据类型单位      p + N * (数据类型单位)
p-N;    //指针向低地址偏移N个数据类型单位
p + q   //指针没有加法运算,两个地址相加没有实际意义
p - q    //两个地址之间相差多少个字节,可通过(p-q)/(数据类型单位)计算两个地址之间存储了多少个元素,计算长度。

六:const修饰指针:

(1)int const *p;  //不能通过p修改p所指向的变量的值
          = const int *p;    

(2)int * const p;   //不能改变p的指向。
(3)const int *const p;  //既不能改变p的指向,也不能通过p修改p所指向的变量的值
          = int const * const p;

总结:当const在*前面时,不能通过指针修改值(即不能对*p进行赋值)

           当const在*后面时,不能修改指针的指向(即不能对p进行赋值)

           当*前后都有const时,既不能修改指针的指向,也不能通过指针修改值(即不能对*p和p进行赋值)

七:二级指针(指向指针地址的指针)

<存储类型> <数据类型> **变量名;
  int a = 10
  int *p = &a;
  int **q;   //
  q = &p;     //q指向p指针的地址
  **q 为10;     //**q表示对*p指针指向的地址取值,即取a的值,所以为10

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值