快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

【C语言】指针学习总结-创新互联

1.变量

 我们平时使用的计算机,有一个CPU,有一个内存,CPU仅包含运算逻辑,所有的指令和数据都在内存中,内存仅供存储。

我们拥有十多年网页设计和网站建设经验,从网站策划到网站制作,我们的网页设计师为您提供的解决方案。为企业提供网站设计、成都网站制作、微信开发、成都微信小程序、手机网站开发、HTML5、等业务。无论您有什么样的网站设计或者设计方案要求,我们都将富于创造性的提供专业设计服务并满足您的需求。

 CPU没有能力直接操作内存里的值,需要从一个特定地址取出数据,对数据进行加工运算,再加工后的数据存入另一个特定地址。

内存是一个存放数据的空间,内存是按一个字节接着一 个字节的次序进行编号,每个字节都有个编号,我们称编号为内存地址。

  当我们声明一个变量 int i = 1; 时,其实是在内存中申请了一个名为i的整型变量宽度的空间,这个空间的编号就是它的地址,空间里的数据为整数1,使用变量就是使用里面的数据。

  用表达式&i表示是取 i 变量所在的地址编号(如:0xff),&为取地址符,即返回 i 变量的地址。

2.指针

  1.声明一个指向整型变量i的指针的语句: int *p;p = &i;   p 是一个指针,也是一个变量(指针变量),只不过指针里存储的数据是一个地址(指针是一个存储其指向的变量的地址的变量)。

可以这样理解:指针变量p的类型为int *,p指向的变量i数据类型为int,*p类型为int,使用*p就是使用变量i,*为取值符。CPU通过操作地址来操作内存空间里的数据,我们通过指针变量(即地址)来操作内存空间里的变量(即数据)。

指针本⾝也是⼀个变量,所以指针也是有⾃⼰的地址,但是这个变量有点特殊,存放的是另⼀个变量的地址。

指针2个层次:

指针⾸先是⼀个变量,他就拥有变量的所有属性:值和类型。它的类型是指针,值就是另⼀个变量的地址。指针变量也需要内存空间,存放其他变量的地址

指针变量存储哪个变量的地址,就表示指向对应的变量的空间

2.指针的运算,对指针变量(指针变量存储的数据(数据是地址))进⾏运算

p表⽰指针变量

+(加法): p + n:

指针p向地址增⼤的⽅向移动n个数据(指针指向的数据类型)大小的地址 如: int * p = 0x10; p + 5 == 0x10 + sizoef(int)*5 = 0x10 + 0x14 == 0x24

-(减法): p - n:

指针p向地址减小方向移动n个数据大小的地址 如: double * p = 0x30; p - 3 = 0x30 - 3*sizeof(double) = 0x30 - 0x18 = 0x18

特殊: p1 - p2:

指针减指针,指两个地址间间隔多少个数据 如: double * p1 = 0x10, *p2 = 0x20; p2 - p1 = (0x20 - 0x10)/sizeof(double) = 0x10 / 8 = 2

*(乘法): p * n---错误

/(除法): p / n---错误

++:

p++: 先使⽤指针变量p,然后 p = p + 1,向地址增大方向移动⼀个数据类型大小,地址存储到p中         

++px:先 px = px+1,向地址增⼤⽅向移动⼀个数据类型⼤⼩地址存储到px 中,然后再使⽤px指针

3.指针与数组

数组:在内存中,数组的数据元素是⼀段连续的空间,在这段空间中每 个元素占⽤对应的大小,元素与元素之间相连

访问数组,就可以使⽤指针。

a[0]和a[1]数据地址是连续的(在存储是时挨在⼀起的),相隔就是⼀个数据大小(a[0])。

指针p = &a[0]        指针访问:*p, *(p+1)

由于数组的数据元素是连续的,元素地址是相邻的,只要有⼀个指针存储了数组元素的地址,就可以指针运算(+、-)可以得到数组其他元素的地址

如: p = &a[0]    p+1 == &a[1]     p+3 == &a[3]

只要知道数组的第⼀个元素的地址,就可以通过地址(指针)遍历整个数组

数组第⼀个元素地址------数组首地址(数组起始地址)

对于数组而言:数组名就是数组的首地址---第⼀个元素地址

int a[5];

数组名+ n (a + n):移动n个数组元素大小的地址

*(地址):取出地址中的数据(取出数组元素)

数组首地址 + n(&a[0] + n):可以偏移搭到数组的每个元素的地址

*(数组名 + n) :访问到数组每个元素 === 数组名[n] 如: *(a+2) == a[2]

指针变量存储地址,可以存储数组首地址 int * p = a; //&a[0] p+n == a+n

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


标题名称:【C语言】指针学习总结-创新互联
当前地址:http://6mz.cn/article/gdsse.html

其他资讯