C语言:指针运算.2021-06-27

1. 指针加1

#include<stdio.h>

int main()
{
	char ac[] = {5, 15, 34, 54, 14, 2, 52, 72};
	char *p = ac;
	int ai[] = {5, 15, 34, 54, 14, 2, 52, 72};
	int *q = ai;

	printf("%p \n",p);
	printf("%p \n",p+1);// %p :地址(16进制)
	printf("%p \n",*(p+1));
	// * 为单目运算符,优先级 高于 + 小于 ()
	// 同理也可用 ++ -- - += -= 符号操作
	putchar('\n');

	printf("%p \n",q);
	printf("%p \n",q+1);
	printf("%p \n",*(q+1));

	printf("%d \n",sizeof(int));
	printf("%d \n",sizeof(char));
	//指针加1实际为地址加上 sizeof(类型),即 下一个数据单元

}

2.指针相减

#include<stdio.h>

int main()
{
	char ac[] = {5, 15, 34, 54, 14, 2, 52, 72};
	char *p = ac;char*p1=&ac[5];
	int ai[] = {5, 15, 34, 54, 14, 2, 52, 72};
	int *q = ai;int*q1=&ai[5];

	
	printf("%p \n",p1-p);
	//得到的值为 16进制地址之差除以 sizeof(类型),
	//即 有几个 该类型的 元素

	putchar('\n');

	printf("%p \n",q1-q);

}

3. *p++

++ 运算符优先级是高于* 的 ,因此可以不用().

这里*p++表示先取*p对应的值 ,然后移到下一个 地址单元,再把移动后的位置赋值给*p

#include<stdio.h>

int main()
{
	char ac[] = {5, 15, 34, 54, 14, 2, 52, 72,'\0'};
	//加个标记结尾的字符 \0,为下文做判断
	char *p = ac;

	while(*p != '\0') printf("%d \n",*p++);
	//遍历输出

}

4.  0 地址

每个程序都有自己的 0地址 . 是虚拟的 0地址 ,不是真实的物理 0地址.

这个地址通常不应该碰触,所以不应该用指针对 0地址 赋值,甚至不能去读取.

NULL为预定义表示0地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

用户的昵称

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

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

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

打赏作者

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

抵扣说明:

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

余额充值