游戏开发第一阶段笔记(2):C语言 指针运算

 本期笔记内容:

C语言 :27.指针运算 

27.指针运算

一个数据的 内存信息 有:①首地址              通过指针的来保存目标数据对象的首地址
                                          ②存储空间大小         通过类型本身来标记数据的空间大小

一、指针类型与整型加减

尝试用指针变量从地址100开始加减,看看能否成功

#include<stdio.h>
int main()
{	
	//在此定义不同类型的指针
	char* pc;
	short* ps;
	int* pn;
	long* pl;
	long long* pll;
	float* pf;
	double* pd;

	pc = 100;
	ps = 100;
	pn = 100;
	pl = 100;
	pll = 100;
	pf = 100;
	pd = 100;

	pc = pc + 1;
	ps = ps + 1;
	pn = pn + 1;
	pl = pl + 1;
	pll = pll + 1;
	pf = pf + 1;
	pd = pd + 1;


	printf("pc=%u\n",pc);
	printf("ps=%u\n", ps);
	printf("pn=%u\n", pn);
	printf("pl=%u\n", pl);
	printf("pll=%u\n", pll);
	printf("pf=%u\n", pf);
	printf("pd=%u\n", pd);
	return 0;
}

编译后可发现:

编译不能正常通过
编译器提示不能将int类型转换为指针类型

指针储存的信息有首地址和空间大小,而数值只能当作首地址,无法表示空间大小,因此数值不能赋值给指针 


因此,若要将数值作为地址导入指针,我们就需要将数值强制转换为指针对应的类型

#include<stdio.h>
int main()
{
    //定义不同指针类型
	char* pc;
	short* ps;
	int* pn;
	long* pl;
	long long* pll;
	float* pf;
	double* pd;

    //括号强制转换100为对应的指针类型(括号里面的为转换后的类型)
    //地址为:100
	pc = (char*)100;
	ps = (short*)100;
	pn = (int*)100;
	pl = (long*)100;
	pll = (long long*)100;
	pf = (float*)100;
	pd = (double *)100;

    //在指针的地址上加1,观察其结果有什么不一样
	pc = pc + 1;
	ps = ps + 1;
	pn = pn + 1;
	pl = pl + 1;
	pll = pll + 1;
	pf = pf + 1;
	pd = pd + 1;

    //将指针的地址打印出来
	printf("pc=%u\n",pc);
	printf("ps=%u\n", ps);
	printf("pn=%u\n", pn);
	printf("pl=%u\n", pl);
	printf("pll=%u\n", pll);
	printf("pf=%u\n", pf);
	printf("pd=%u\n", pd);
	return 0;
}

编译可以正常通过了,打印出了:
pc = 101
ps = 102
pn = 104
pl = 104
pll = 108
pf = 104
pd = 108

观察结果,所有的指针内一开始保存的首地址100,加1之后变成了不同的值,他们与100的差值对应的目标数据对象的空间大小

从这个例子可以看出,指针类型加1后,将首地址向后移动sizeof(目标数据对象)个字节 

将指针类型加n和减n都是这样移动的,移动n个目标数据对象字节

得出结论:1.sizeof(目标数据对象)被称作 步长
                  2.指针类型加n后,其首地址向后移动n*步长个字节
                  3.指针类型减n后,其首地址向前移动n*步长个字节

二、应用指针类型与整型加减

int* p;                                                        //定义一个指针p
*(p - 1) = 123;                                           //意思是将指针p-1取123的
p - 1;                                                         //意思是在指针p的地址上向前移动1个步长


加法亦是如此

三、同类型指针减法运算


      指针类型相减后,结果为两个首地址的差值除以步长

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evonso

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值