学习C的知识点九--指针

1 指针的概念:

指针的全称:指针变量(相对应的有指针常量。),是一个变量,该变量可以用来保存一个数据。保存的数据是一个十六进制的地址,给一个指针进行赋值操作的时候,称为 “指向”

2、定义及声明:

①一个完整的指针定义方式:

变量类型+*+变量名

②指针变量的大小:
一个指针在32位系统中,占4个字节大小,在64位系统中,占8个字节大小 。

3、指针的取值操作:*

对一个地址进行取取操作,就会直接取到该地址空间上的值。
同理,对一个指向一片地址空间的指针进行取
操作,同样会取到那片地址空间上的值。
使用指针是特别注意,一个指针指向的数据是哪一个数据,以及一个指针取*后是哪一个数据。

4、指针变量的类型:

所有数据类型,都可以变成该数据类型的指针。

  • int * 代表int类型的指针
  • char* 代表char类型的指针
  • int ** 代表int*类型的指针
  • void * 代表通用指针

通用指针可以作为左值接受任何类型的指针数据。但是通用指针有一个缺点:它不可以直接取值。通用指针保存的数据,系统并不会知道这个数据具体是什么数据类型,所以带该地址进行取操作的话,系统不知道需要分配多少缓存空间。所以,在对void通用指针进行取*之间,需要对该通用指针明确数据类型。
对一个通用指针明确数据类型:强制类型转换
void*不代表空指针,而代表通用指针,将指针设置为空指针应用NULL来代表,或者用0。

5、指针与函数的关系:

函数参数使用指针传参的形式:将地址传给函数内部,函数外部与函数内部变量同步发生改变。
但是依旧会发生实参给形参赋值的操作:这个操作代表了形参保存了实参的值,由于实参是一个变量的地址 ,所以形参实际上保存的就是该变量的地址。所以在函数内部对该地址进行改变的地里,实参也在改变。

函数名本身也是一个指针,它不能作为左值,只能作为右值。
函数指针可以用来接受一个函数名,接受之后,调用这个指针,就相当于在调用该函数。
函数指针声明方式:指向函数的返回值类型+指针变量+(指向的函数的参数列表的具体格式);

6、指针与数组的关系:

数组名本身就是一个指针,但是需要注意的是,数组名这个指针不能作为左值去指向其它地方,它只能作为右值给其它指针赋值。数组名这个指针是一个常量。

指针的偏移:
通过对已知的指针进行+或-操作,来实现访问到与已知指针相关的其它内存空间。
指针偏移的量(即一个指针+1后,地址增加的绝对值):它根据数据类型的大小模块化偏移。
数组名指向数组首元素的地址。
一个用来存放指针的数组,称为指针数组。那么一个用来指向数组的指针,就称为数组指针。我们严格意义上说的数组指针,它是一个指向二维数组的指针。

指针小结:

二维数组和指针数组的区别:

  1. 指针是一个变量, 它存储另一个对象的内地址。
  2. 指针的声明由基本类型、 星号 (*)和变量名组成
  3. 为指针赋值, 赋值运算符右侧必须是一个地址。如果是普通变量,则需要在前面加一个取地址运行符&;如果是另一个指针变量或者是一个数组,不需要加&运算符。
  4. 运算符 *用于返回指针向的内存地址中储值。
  5. 指针算术运算的含义是指针的移动, 将指针执行加上或者减去一个整数值n的运算相当于指针向前或向后移动n个数据单元。
  6. 指针可以执行比较相等的运算, 用来判断两个指针是否指向同一变量。
  7. 指向数组的针, 存储的是数组中元素地址。 数组 data的第 (i+1)个元素的地址可表示为&data[i](data+i)
  8. 对于regitser(寄存器)类型的变量,不能进行取地址(&)的操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值