文章目录
前言
通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。指针是C语言中的一个重要概念及其特点,也是掌握c语言比较困难的部分。
一、什么是指针
定义:指针也就是内存地址。指针变量是用来存放内存地址的变量,
(内存地址:是一种用于软件及硬件等不同层级中的数据概念,用来访问电脑主存中的数据。)
在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。
数据类型符 *指针变量名[=初始地址值]
1. “*” 表示定义的是一个指针变量,指针变量的前面必须有 “*” 号;
2. 在定义指针变量的同时也可以定义普通变量或数组等其它变量;
3. “数据类型符” 是指针变量所指向变量的数据类型,可以是任何基本数据类型,也可以是其他数据类型;
4. “初始地址值” 通常是 “&变量名” “&数组元素” 或 “一维数组名”,这里的变量或数组必须是已定义的;
5. 在定义指针变量时,可以只给部分指针变量赋初值;
6. 指针变量的初始化,除了可以是已定义变量的地址,也可以是已初始化的同类型的指针变量,也可以是NULL(空指针);
二、为什么要使用指针
在C语言中,指针的使用非常广泛,因为使用指针往往可以生成更高效、更紧凑的代码。总的来说,使用指针有如下好处:
1)指针的使用使得不同区域的代码可以轻易的共享内存数据,这样可以使程序更为快速高效;
2)C语言中一些复杂的数据结构往往需要使用指针来构建,如链表、二叉树等;
3)C语言是传值调用,而有些操作传值调用是无法完成的,如通过被调函数修改调用函数的对 象,但是这种操作可以由指针来完成,而且并不违背传值调用。
4)函数返回多个值,某些值就只能通过指针返回,传入的参数实际上是需要保存带回的结果的变 量
三、指针的简单应用
指针数组
指针数组是一个普通的数组,数组中的每个元素都是指针指针数组的定义为:类型 *p数组
例如:
#include <stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};
int i = 0;
int *p[5];
for (i = 0; i < 5; i++)
{
p[i] = &a[i];
}
printf("a[3]:%d\n", *(p[3]));
printf("a[3]:%d\n",*(*(p + 3)));
return 0;
}
指针函数
在函数里面使用指针,例如之前不能实现的交换函数可以用指针来实现
虚假的交换函数
#include"stdio.h"
void swap(int a, int b);
int main()
{
int a = 6, b = 7;
swap(a, b);
printf("a=%d , b=%d", a, b);
return 0;
}
void swap(int a, int b)
{
int t = a;
a = b;
b = t;
}
真正的交换函数
#include<stdio.h>
void swap(int *pa,int *pb);
int main(void)
{
int a = 5;
int b = 6;
printf("a=%d b=%d",a,b);
return 0;
}
void swap(int *pa,int *pb)
{
int t = *pa;
*pa = *pb;
*pb = t;
}
总结
指针是c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简洁,紧凑,高效,每一个学习和使用c语言的人,都应当深入了解地学习和掌握指针,可以说,不掌握指针就是没有掌握C的精华