C语言指针概念

本文详细阐述了C语言中指针的基本概念,包括指针的类型、指针指向的类型、指针数组、数组指针、指针函数、函数指针以及它们与const的结合使用。同时讲解了常量指针、指针常量和指向常量的指针常量的区别,帮助读者理解指针操作的关键点。
摘要由CSDN通过智能技术生成

C语言指针概念

1.指针

1.1.指针的类型

(1)是指针自身的类型;
(2)把指针声明语句中的指针名字去掉,剩下部分就是这个指针的类型;
(3)作用:在指针相互赋值时,同类型指针才可相互赋值;
(4)举例

	int *p;		/* 指针类型是int *; */
	int **p,	/* 指针类型是int **;*/

1.2.指针指向的类型

(1)是指针指向的数据(内存)的类型;
(2)把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型;
(3)作用:决定了指针变量所取空间内容的宽度,决定了指针变量每次增减时跳过的单位跨度;
(4)举例

	int *p;		/* 指针指向的类型是int ; */
	int **p,	/* 指针指向的类型是int *;*/

1.3.指针数组

(1)是一个数组,指一个数组里面装着指针,数组的元素全是指针;
(2)定义:int *p[n];

1.4.数组指针(也称为行指针)

(1)是一个指针,是一个指向数组的指针变量,指向了某个数组的首地址;
(2)定义:int (*p)[n],释义:p指向包含n个int元素的一维数组,所以初始化时要把一个一维数组的整体地址赋值给p。
(3)二维数组用法
    int arr[][],p=arr;
   将二维数组名(即第一行地址)赋值给数组指针变量,其实二维数组的每一行就是一个一维数组,
   数组名arr就是第一行的地址,arr+1是第二行的地址,以此类推;
(4)一维数组用法
   int arr[],p=&arr;
   一维数组相当于只有一行,&arr就是一维数组的行地址;
(5)一维数组名是数组首地址,也是首元素的地址;
    如:int arr[4];
   arr是数组首地址,也是首元素的地址,那么arr+1是第二个元素的地址;
   &arr是整个数组的地址,那么&arr+1是下一个arr[4]整个数组的地址;
(6)二维数组名是第一行地址;

1.5.指针函数

(1)是一个函数,返回值是一个指针,要注意返回的这个指针不能是局部变量,局部变量在函数调用完之后就被清掉了;
(2)举例:int *func(int a,int b);

1.6.函数指针

(1)是一个指针,是一个指向函数的指针变量,是调用函数的入口地址;
(2)每个函数都有一个入口地址,该入口地址就是函数指针所指向的地址;
(3)定义:int (*func)(int, int);
(4)举例:

	int add(int a, int b); 		/* 定义函数 */
	int (*ptr_add)(int, int); 	/* 定义函数指针,形参可以不用写 */
	ptr_add = add; 				/* 初始化 */

1.7.函数指针和const

(1)函数指针常量(可能也叫常量函数指针),指针为常量;
(2)常规定义

 	int add(int a, int b); 					/* 定义函数 */
    int (*const ptr_add)(int, int) = add;	/* 定义函数指针,指针为常量,并初始化,因为是指针常量,后面是不能赋其它地址的 */

(3)typedef定义

	typedef int (*PFUNC)(int, int); /* 定义一个函数指针类型 */
    int add(int a, int b); 			/* 定义函数 */
    PFUNC const ptr_add = add; 		/* 定义函数指针,指针为常量,并初始化,因为是指针常量,后面是不能赋其它地址的 */
    const PFUNC ptr_add = add;		/* 或者这样定义 */

2.指针和const

2.1.常量指针

(1)指针指向的内容是个常量,不能再改值;
(2)举例

 	int const *p;const int *p; /* 习惯用这种定义 *//* 上述两种是一样的,const修饰的都是*p,所以*p常量,指针p可变; */

(3)如何区分
    a. const在 * 号左边,则为常量指针,指针可变,内容不可变
    b. const在 * 号右边,则为指针常量,指针不可变,内容可变

2.2.指针常量

(1)指针本身是个常量,不能再指向其他地址;
(2)举例:

	int *const p; /* const修饰的是p,所以指针p是常量,*p可变;*/

2.3.指向常量的指针常量

(1)常量指针和指针常量的结合,指针和指针指向的内存都不可变
(2)举例:

	const int * const p;	/* 第一种定义 */
	int const * const p;	/* 第二种定义 */

3.总结

以上就是今天要讲的内容,本文仅仅简单介绍了C语言指针的相关概念与定义,虽然简化了很多,但是关键知识点很多,希望能够帮助到大家。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值