栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

指针的用法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

指针的用法

文章目录
  • 前言
  • 一、指针是什么?
  • 二、指针变量
  • 三.指针数组
  • 四、数组指针
  • 五、函数指针
  • 六、函数指针数组
  • 七、指向函数指针数组的指针
  • 总结


前言

C语言是人与计算机交流的一种语言,它既有高级语言的特点,又具有汇编语言的特点。C语言引入指针是它显著优点之一,善于利用指针可以提高程序效率,用程序更加简洁,高效。这也是为什么说指针是C语言的灵魂。下面汇总一些指针具体点用法。


一、指针是什么?

内存是由一个又一个的字节组成的,每一个字节对应一个地址编号。在程序中定义一个整形变量a,系统就会给程序分配四个字节大小的内存空间,每一个字节会有一个相对应的地址编号,通过首地址编号就可以找到这个整形变量a,可以说,这个首地址就是指向这个整形变量,所以将地址形象化的称为“指针”。

二、指针变量

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
	int a = 10;//定义一个整形变量a
	int* pa = &a;//将a的地址存放到指针变量pa中
	printf("%dn", *pa);
	return 0;
}

程序运行结果:


指针变量pa,里面存放的是整形变量a的地址。

三.指针数组

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
	int a = 10;
	int b = 20;
	int i = 0;
	int* parr[2] = { &a,&b };//将整形变量a和b的地址存放到指针数组parr中
	for (i = 0; i < 2; i++)
	{
		printf("%d ", *(parr[i]));
	}
	return 0;
}

程序运行结果:

指针数组parr本质上是一个数组,这个数组存放了两个元素,每个元素中又存放了一个整形变量的地址。

四、数组指针

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
	int arr[2] = {10,20};//定义一维数组
	int(*p)[2] = &arr;//将数组地址赋给指针变量p
	int i = 0;
	for (i = 0; i < 2; i++)
	{
		//printf("%d ", (*p)[i]);
		//printf("%d ", *(*p+i));
		//printf("%d ", arr[i]);//*p==arr
		printf("%d ", *(arr+i));
	}
	return 0;
}

程序运行结果:

数组指针p本质上是一个指针,里面存放的是arr数组中所有元素的地址,这个数组有两个元素,每个元素中存放的是一个int类型的数值。

五、函数指针

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include
int Add(int x, int y)//定义一个Add函数
{
	return x + y;
}
int main()
{
	int a = 10;
	int b = 20;
	int (*p)(int, int) = Add;//将函数地址Add赋给指针变量p
	printf("%dn", (*p)(a, b));
	return 0;
}

程序运行结果:

函数指针本质上是一个指针,这个指针变量里面存放的是一个函数的地址。

六、函数指针数组

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include
int Add(int x, int y)//定义Add函数
{
	return x + y;
}
int Sub(int x, int y)//定义Sub函数
{
	return x - y;
}
int main()
{
	int a = 10;
	int b = 20;
	int i = 0;
	int (*parr[2])(int, int) = { Add,Sub };//将Add和Sub函数地址赋给函数指针数组parr
	for (i = 0; i < 2; i++)
	{
		printf("%d ", (*parr[i])(a, b));
	}
	return 0;
}

程序运行结果:

函数指针数组本质上是一个数组,数组里面存放两个元素,每个元素中又存放了一个函数的地址。

七、指向函数指针数组的指针

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include
int Add(int x, int y)//定义Add函数
{
	return x + y;
}
int Sub(int x, int y)//定义Sub函数
{
	return x - y;
}
int main()
{
	int a = 10;
	int b = 20;
	int i = 0;
	int (*parr[2])(int, int) = { Add,Sub };//函数指针数组
	int (*(*p)[2])(int,int) = &parr;//指向函数指针数组的指针
	for (i = 0; i < 2; i++)
	{
		printf("%d ", (*pparr)[i](a, b));
	}
	return 0;
}

程序运行结果:

p是一个指针变量,这是一个指向函数指针数组的指针,意思是这个指针里面存放的是函数指针数组的地址,这个数组又有两个元素,每个元素中存放的又是一个函数的地址。

总结

指针功能强大,同时它的使用方法也有很多种,所以理清各个用法是指针学习必不可少的一部分。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号