指针

本文深入讲解了指针的概念,包括其定义、使用方法及注意事项。从指针变量的定义到解引用,再到指针与数组的关系,以及如何在函数中使用指针。文章详细解析了各种类型的指针,如无类型指针、指向常量的指针和指针常量,以及二级指针的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针的概念
指针也是一个变量
指针存放的内容是一个地址,该地址指向一块内存空间
指针变量的定义
可以定义一个指向一个变量的指针变量。
int *p;//表示定义一个整型的指针变量。
*p;///间接访问符/解引用,代表指针所指内存的实际数据
指针变量只能存放地址,不能将一个int型变量直接赋值给一个指针。
int *p = 100;
&取地址运算符
&可以取得一个变量在内存当中的地址
无类型指针
定义一个指针变量,但不指定它指向具体哪种数据类型。可以通过强制转化将void *转化为其他类型指针,也可以用(void *)将其他类型指针强制转化为void类型指针。
void *p

NULL
NULL在C语言中的定义为(void *)0

指针之间赋值比普通数据类型赋值检查更为严格,例如:不可以把一个double * 赋值给int *

指向常量的指针与指针常量
const char *p;//定义一个指向常量的指针
char *const p;//定义一个指针常量,一旦初始化之后其内容不可改变

指针与数组的关系
一个变量有地址,一个数组包含若干个元素,每个元素在内存中都有地址。
int a[10];
int *p = a;

通过指针使用数组元素
p + 1代表&a[1],也可以直接使用p[1]表示a[5]
p + 5 代表&a[5]
p++

指针数组
int *p[5];

指向指针的指针(二级指针)
指针就是一个变量,既然是变量就也存在内存地址,所以可以定义一个指向指针的指针。
int i = 10;
int *p1 = &i;
int **p2 = &p1;
printf("%d\n", **p2);
以此类推可以定义3级甚至多级指针。

指针变量做为函数的参数
函数的参数可以是指针类型。,它的作用是将一个变量的地址传送给另一个函数。

数组名作为函数参数
当数组名作为函数参数时,C语言将数组名解释为指针
int func(int array[10]);

    int a=10;
	int b=20;
	int *p=&a;//&a a的地址,a的指针
	//int *p  定义整型的指针变量
	*p=100;//间接访问符/解引用,把a的值赋值为100
	p=&b;
	int **pp=&p;
	*pp=&a;
	**pp=1000;
	*pp=&b;
	**pp=2000;

在这里插入图片描述

void Swap1(int a,int b)
{
	int tmp=a;
	a=b;
	b=tmp;
}

在这里插入图片描述
子函数进行交换,没有对主函数造成影响

void Swap2(int *p1,int *p2)
{
	int *tmp=p1;
	p1=p2;
	p2=tmp;
}

在这里插入图片描述
没有解引用

void Swap3(int *p1,int *p2)
{
	int *tmp;  //野指针,悬挂指针
	//tmp没有初始化
	*tmp=*p1;
	*p1=*p2;
	*p2=*tmp;
}

野指针

void Swap(int *p1,int *p2)
{
	int tmp;
	tmp=*p1;
	*p1=*p2;
	*p2=tmp;
}

在这里插入图片描述

子函数的改变影响父函数的改变

  • 1、传指针
  • 2、解引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值