C语言程序核心,图解C语言基础的核心——指针!

指针简介

变量的地址的概念

内存是以字节为单位进行编址的,内存中的每个字节都对应一个地址,通过地址才能找到每个字节。

变量对应内存中的一段存储空间,该段存储空间占用一定的字节数,用这段存储空间的第一个字节的地址表示变量的地址。

指针的概念

指针是一个变量,与普通变量不同的是,普通变量中存储的是数据,指针变量中存储的是另一个变量的地址。这样我们就可以通过指针间接的对普通变量进行操作。

90676725_1

指针的特点

指针是一个变量,可以在程序执行过程中改变它的值,即可以改变指针的指向。可以在某时刻指向变量x,也可以在另一时刻指向变量y

指针可存放 C 语言中的任何基本数据类型、数组和其他所有高级数据结构的地址

若指针已声明为指向某种类型数据的地址,则它不能用于存储其他类型数据的地址

应为指针指定一个地址后,才能在语句中使用指针

声明变量并初始化指针

90676725_2

与指针相关的运算符图解:

90676725_3

简介运算符

90676725_4

注意*预算符

int *p = 0xcc是对p本身值的初始化,就是p指向了位于0xcc地址的变量,这里的*代表声明一个指针变量,他是属于声明的一部分

而int *p,a;p = &a;*p=0xcc;注意补上了p指向a的代码

这里的*是一个操作符,*p代表了p所指变量,上面的情况就理解为a = 0xcc;

指针得点:

指针变量的命名规则和其他变量的命名规则一样

指针不能与现有变量同名

指针可存放 C 语言中的任何基本数据类型、数组和其他所有高级数据结构的地址

若指针已声明为指向某种类型数据的地址,则它不能用于存储其他类型数据的地址

应为指针指定一个地址后,才能在语句中使用指针

指针是一个变量,可以在程序执行过程中改变它的值,即可以改变指针的指向。可以在某时刻指向变量x,也可以在另一时刻指向变量y

指针预算符

实质:指针中存储的地址的运算。

类型:

指针赋值运算:赋地址运算。

指针加减运算:

指针++或- -

指针加减一个整数

指针比较运算:两个指针比较运算。

使用递增/递减运算符(++ 和 --)将指针递增或递减

90676725_5

将指针加上或者减去某个整数值

(以n*sizeof(T)为单位进行移动)

90676725_6

注意:只有当指针指向一串连续的存储单元时,指针的移动才有意义。才可以将一个指针变量与一个整数n做加减运算。

指向数组的指针:

一个数组存储在一块连续内存单元中;数组名就是这块连续内存单元的首地址;

第 (i + 1) 个数组元素的地址可表示为 &data[i] 或 (data+i)

可以通过以下方式为指向数组的指针赋值:

int a[10];

pa=&a[0]; // 或者 pa=a;

一个指针变量可以指向一个数组元素

int *ptr,data[10];

ptr=data+3;//或者ptr=&data[3]

指针与数组

数组与地址

数组名代表数组(元素)的首地址,即第一个元素的地址。

对数组的首地址加上偏移量x就可以得到其它元素的地址。

数组元素的访问

下标法: 用 a[i] 的形式存取数组元素。

地址法: 用 *(a+i)的形式存取数组元素。

指针法:用指针变量p指向数组的首地址,然后通过移动指针存取数组元素。

如 p=a, *(p+i) = 1。

注意:

1.数组名是一个常量,不允许重新赋值。

2.指针变量是一个变量,可以重新赋值。

3.p+i和a+i均表示数组元素a[i]的地址,均指向a[i]

4.*(p+i)和*(a+i)均表示p+i和a+i所指对象的内容a[i]。

5.*p++:等价于*(p++)。其作用:先得到*p,再使p=p+1。

6.(*p)++:表示将p所指向的变量(元素)的值加1。即等价于 a[i]++ 。

7.指向数组元素的指针也可以表示成数组的形式,即允许指针变量带下标,如*(p+i)可以表示成p[i]。

总结:

指针是一个变量,它存储另一个对象的内存地址

指针的声明由基本类型、星号 (*) 和变量名组成

为指针赋值,赋值运算符右侧必须是一个地址。如果是普通变量需要在前面加一个取地址运算符 &;如果是另一个指针变量或者是一个数组,不需要加 &运算符

运算符 * 用于返回指针指向的内存地址中存储的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值