C语言指针操作·八大总结

在这里插入图片描述

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。 


文末附八大详细总结 


学习日记

目录

学习日记

前言​编辑

一、指针的含义 

二、 一个地址型的数据实际上包含3个信息 

三、有关指针变量的归纳比较

四、指针运算 

指针变量加(减)一个整数

指针变量赋值

两个指针变量可以相减

两个指针变量比较

空值

五、指针的优点

C语言指针操作


前言

        指针这里分为八个小部分,分别是“指针变量”、“通过指针引用数组”、“*通过指针引用多维数组”、“通过指针引用字符串”、“*指向函数的指针”、“*返回指针值的函数”、“*指针数组和多重指针”、“*动态内存分配与指向它的指针变量” 。   

一、指针的含义 

        “指针”是C语言中一个形象化的名词,形象地表示“指向”的关系,其在物理上的实现是通过地址来完成的。

&a是变量a的地址,也可称为变量a的指针。

指针变量是存放地址的变量,也可以说,指针变量是存放指针的变量。

指针变量的值是一个地址,也可以说,指针变量的值是一个指针。

指针变量也可称为地址变量,它的值是地址。

&是取地址运算符,&a是a的地址,也可以说,&是取指针运算符。

&a是变量a的指针(即指向变量a的指针)。

数组名是一个地址,是数组首元素的地址,也可以说,数组名是一个指针,是数组首元素的指针。

函数名是一个指针(指向函数代码区的首字节),也可以说函数名是一个地址(函数代码区首字节的地址)。

函数的实参如果是数组名,传递给形参的是一个地址,也可以说,传递给形参的是一个指针。

二、 一个地址型的数据实际上包含3个信息 

① 表示内存编号的纯地址。

② 它本身的类型,即指针类型。

③ 以它为标识的存储单元中存放的是什么类型的数据,即基类型。

int a;
/* &a为a的地址,它就包括以上3个信息,它代表的是一个整型数据的地址,int是&a的基类型(即它指向的是int型的存储单元)。&a就是“指向整型数据的指针类型”或“基类型为整型的指针类型”,其类型可以表示为“int *”型。*/

要区别指针和指针变量。指针就是地址,而指针变量是用来存放地址的变量。

对于指针变量来说,把谁的地址存放在指针变量中,就说此指针变量指向谁。

int a,*p;		//p是int*型的指针变量,基类型是int型 
float b;
p=&a;		//a是int型,合法 
p=&b;		//b是float型,类型不匹配

void *指针是一种特殊的指针,不指向任何类型的数据。如果需要用此地址指向某类型的数据,应先对地址进行类型转换。

三、有关指针变量的归纳比较

变量定义

类型表示

含义

int i;

int

定义整型变量i

int *p;

int *

定义p为指向整型数据的指针变量

int a[5];

int [5]

定义整型数组a,它有5个元素

int *p[4];

int *[4]

定义指针数组p,它由4个指向整型数据的指针元素组成

int (*p)[4];

int (*)[4]

p为指向包含4个元素的一维数组的指针变量

int f();

int ()

f为返回整型函数值的函数

int *p();

int *()

p为返回一个指针的函数,该指针指向整型数据

int (*p)();

int (*)()

p为指向函数的指针,该函数返回一个整型值

int **p;

int **

p是一个指针变量,它指向一个指向整型数据的指针变量

void *p;

void *

p是一个指针变量,基类型为void(空类型),不指向具体的对象

四、指针运算 

指针变量加(减)一个整数

p++;		//将该指针变量的原值(是一个地址)和它指向的变量所占用的存储单元的字节数相加

指针变量赋值

将一个变量地址赋给一个指针变量。 不应把一个整数赋给指针变量。

p=&a; 		//将变量a的地址赋给p
p=array; 	//将数组array首元素地址赋给p
p=&array[i];	//将数组array第i个元素的地址赋给p
p=max;		//max为已定义的函数,将max的入口地址赋给p
p1=p2;		//p1和p2是基类型相同指针变量,将p2的值赋给p1

两个指针变量可以相减

如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数。

两个指针变量比较

若两个指针指向同一个数组的元素,则可以进行比较。指向前面的元素的指针变量“小于”指向后面元素的指针变量。如果p1和p2不指向同一数组则比较无意义。

空值

        指针变量可以有空值,即该指针变量不指向任何变量。 NULL是一个符号常量,代表整数0。在stdio.h头文件中对NULL进行了定义:#define NULL 0 它使p指向地址为0的单元。系统保证使该单元不作它用(不存放有效数据)。

        p的值为NULL与未对p赋值是两个不同的概念。前者是有值的(值为0),不指向任何变量,后者虽未对p赋值但并不等于p无值,只是它的值是一个无法预料的值,也就是p可能指向一个事先未指定的单元。

五、指针的优点

提高程序效率;

在调用函数时当指针指向的变量的值改变时,这些值能够为主调函数使用,即可以从函数调用得到多个可改变的值;

可以实现动态存储分配。

如果使用指针不当,会出现隐蔽的、难以发现和排除的故障。因此,使用指针要十分小心谨慎。

C语言指针操作

C语言指针操作(一)指针变量

C语言指针操作(二)通过指针引用数组

C语言指针操作(三)*通过指针引用多维数组 

C语言指针操作(四)通过指针引用字符串

C语言指针操作(五)*指向函数的指针

C语言指针操作(六)*返回指针值的函数

C语言指针操作(七)*指针数组和多重指针 

C语言指针操作(八)*动态内存分配与指向它的指针变量

猜你喜欢

转载自blog.csdn.net/m0_63794226/article/details/126617644