指针

指针

1、什么是指针
看懂了下图,指针就学会了一大半!

把指针P看成一个盒子,盒子里面存了一把钥匙,这把钥匙能打开另一个盒子,钥匙上的号就是另一个盒子的地址,钥匙的大小一定要符合能开开盒子的尺寸,也就是说声明的时候指针的类型必须和变量的类型一致。

指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。
取变量a的地址可用如下操作

#include <stdio.h>
#include <stdlib.h>
int main()
{
 
 int a = 10;
 int *p = &a;
 printf("a变量的地址是:%d\n",p);//p的值为a的访问地址
 printf("a变量的地址是:%d\n", &a);//或者直接用&a取地址
 system("pause");
}

输出结果:

a变量的地址是:6159936
a变量的地址是:6159936

有效的指针声明:

int *ip;
double *dp;
float *fp;
char *ch;

不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。int型指针表示所指向变量的内存占据4个字节,char型指针表示所指向变量的内存占据1个字节。。。

2、如何使用指针?
使用指针时会频繁进行以下几个操作:
1、定义一个指针变量;
2、把变量地址赋值给指针;
3、访问指针变量中可用地址的值。

#include <stdio.h>
#include <stdlib.h>
int main()
{
 int a = 20;
 int *p;
 p = &a;
 printf("a 变量的地址:%p\n", &a);
 printf("p 变量存储的地址:%p\n", p);
 printf("*p变量的值:%d\n", *p);
 system("pause");
}

输出的结果有:

a 变量的地址:00EFFC0C
p 变量存储的地址:00EFFC0C
*p变量的值:20

3、c中的NULL指针
在声明变量的时候,如果没有确切的地址可以赋值,为指针变量赋一个NULL值。

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int *p = NULL;//定义指针p为空指针
	printf("p的值是%d\n", p);
	printf("p的地址是%p\n", &p);
	printf("p的地址是%d\n", &p);

	system("pause");
}

输出的结果是:

p的值是0
p的地址是004FFA68
p的地址是5241448

4、指针的算术运算
指针是一个用数值表示的地址。因此,可以对指针进行算数运算,可对指针进行四种算术运算:++、–、+、-。

const int MAX = 3;
int main()//输出数组的存储地址和存储值
{
	int var[] = { 10, 100, 200 };
	int i, *p;
	p = var; //指针中的数组地址
	for (i = 0; i < MAX; i++)
	{
		printf("存储地址:var[%d]=%p\n", i, p); //数组的存储地址
		printf("存储值: var[%d]=%d\n", i, *p); //数组的存储值
		p++; //指向下一个位置
	}
	system("pause");
}

输出结果:

存储地址:var[0]=0073FEAC
存储值: var[0]=10
存储地址:var[1]=0073FEB0
存储值: var[1]=100
存储地址:var[2]=0073FEB4
存储值: var[2]=200
请按任意键继续. . .

5、指针的比较

#include <stdio.h>
#include <stdlib.h>
//指针可以用关系运算符进行比较,如==、<和>。
//如果p1和p2指向相关的两个变量,比如同一个数组的不同元素,则可对p1和p2进行大小比较。
const int MAX = 3;
int main() 
{
	int var[] = { 10, 100, 200 };
	int i, *p;
	p = var;//指针中第一个元素的地址
	i = 0;
	while (p <= &var[MAX - 1])
	{
		printf("存储地址:var[%d] = %p\n", i, p);
		printf("存储值:var[%d] = %d\n", i, *p);
		p++;//指向下一个位置
		i++;
	}
	system("pause");
}

输出结果

存储地址:var[0] = 00B3FD14
存储值:var[0] = 10
存储地址:var[1] = 00B3FD18
存储值:var[1] = 100
存储地址:var[2] = 00B3FD1C
存储值:var[2] = 200
请按任意键继续. . .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值