成都网站建设设计

将想法与焦点和您一起共享

C语言指针知识点-创新互联

目录

成都创新互联长期为超过千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为武安企业提供专业的成都网站建设、做网站武安网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。

前言:

1.指针

1.1什么是指针

1.2指针的定义

1.3*号的作用

1.4指针的指向类型和数据类型的大小

1.5修改*p和p

1.6.空指针和野指针

1.7指针和一维数组

1.8指针的运算

2.二级指针

2.1什么是二级指针

2.2二级指针的数据类型和指向数据类型

3.数组指针的定义

3.1数组指针和指针数组

3.2数组指针的指向类型和数据类型

3.3指向类型和数据类型的大小

3.4改变数组指针的指向

3.5数组指针的运算

前言:

指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

1.指针 1.1什么是指针

内存是由很多字节组成的,字节很多,所以每个字节都有独属于字节的一个编号,这个编号就是指针。

1.2指针的定义

例如a的地址时0x100,要把这个编号存起来,就要用到指针。int *p = &a; *是标识符,表示我定义了一个指针变量p,里面存放的是int类型的a的地址。所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

1.3*号的作用
  1. 标识符,用在定义指针的时候,表示我定义了一个指针变量 int *p;
  2. 取值运算符,取了指针所指向的空间里面的内容。
  3. 乘号。
1.4指针的指向类型和数据类型的大小

Int *p = &a;

p的数据类型是int *。

p指向的数据类型是int类型。

指针的数据类型大小在32os永远是4字节,64os是8字节,不会因为指向的数据类型而发生改变。Int * char * double* float *都是4个字节。

1.5修改*p和p

可以通过改变*p,进而改变p所指向的空间里面的内容。

可以改变p的指向,让p指向a改变成p指向b。

1.6.空指针和野指针

野指针,没有固定指向的指针。

野指针,并不知道指向的哪片空间,所以比较危险,一般不用。

怎样避免野指针?

在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。让野指针指向NULL,然后需要使用指针的时候再给指针p定义指向。

1.7指针和一维数组

Int arr[5] = {1,2,3,4,5};

arr是这片空间的名字,也是这片空间的首地址。&arr[0] = arr,arr[0]是int型的,&arr是int *型的,

可以定义一个int *p = &arr[0],         arr = &arr[0],      int *p = arr,这里可以说arr赋值给p,也可以说p

指向arr,不能说arr 等于P。

1.8指针的运算

一维整型数组和指针

p-q:计算出来连续空间里面,p和q中间差了几个元素(减出来的字节数/sizeof(数据类型))。

p++:往地址增大的方向移动,移动了一个数据类型大小,p的指向已经发生了改变。

p+1:往地址增大的方向移动,移动了一个数据类型大小,p的指向没有改变。

p--:往地址减小的方向移动,移动了一个数据类型大小,p的指向已经发生了改变。

p-1:往地址减小的方向移动,移动了一个数据类型大小,p的指向没有改变。

2.二级指针 2.1什么是二级指针

C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个星号*。p1 是一级指针,指向普通类型的数据,定义时有一个*;p2 是二级指针,指向一级指针 p1,定义时有两个*

一级指针存放的是普通变量的地址,二级指针存放的是一级指针的地址。

2.2二级指针的数据类型和指向数据类型

本身的数据类型:int ** 4个字节。

指向的数据类型:int *  4个字节。

3.数组指针的定义

数组指针是指向数组整体的,int arr[5],他的数据类型是int [5]

数据类型  (*变量名)[一维数组的元素个数]

如果不加(),变量名先和[]去结合,变成数组,然后再和*去结合,变成指针,最终变成指针数组。

3.1数组指针和指针数组

数组指针:他是一个指针,指向了一个数组     int (*p)[5]

指针数组:他是一个数组,里面存放的都是指针 int *p[5]

3.2数组指针的指向类型和数据类型

指向类型:int ()[5]

数据类型:int (*)[5]

3.3指向类型和数据类型的大小

对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体情况。

3.4改变数组指针的指向

3.5数组指针的运算

p+1:往地址增大的方向移动一个数组类型,p的指向没有改变。

p-1:往地址减小的方向移动一个数组类型,p不改变。

p++:增大的方向移动一个数据类型,p的指向已经改变。

p--:减小的方向移动一格数据类型,p改变。

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


网站标题:C语言指针知识点-创新互联
网站路径:http://chengdu.cdxwcx.cn/article/dccidg.html