指针的运算系列(1):指针加减整数; 指针的比较大小

举报
念君思宁 发表于 2023/02/16 18:04:39 2023/02/16
【摘要】 指针的运算系列(1):指针加减整数; 指针的比较大小

对于指针,选择大家或多或少的都有着些许见解和认识!大部分初步了解指针了已经,要不然,还不注重指针的基础知识??也可以参考笔者前面几篇文章内容,根据书本知识来学习参考!好高骛远的看指针的运算呢??

指针的运算!

指针的(+ , -)加减整数运算

对于指针的运算应用较为广泛,但是,对于加减乘除四则运算,在指针这儿,我们却只见过指针的加减整数运算,并没有涉及指针的乘除整数运算,原因很简单:指针的本质其实还是一个地址,对地址进行乘除整数?怎么可能得出来正确的答案呢??

下面笔者在指针,*(解引用操作符)之间,详解指针的加减整数运算!

//按顺序输入各组元素
#include <stdio.h>
int main()
{
	double arr[5] = { 0 };
	double* p = arr;
 
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		arr[i] = i + 1;             //在每次循环的基础上,将元素赋值为i+1
 
		printf("%lf ", *(p + i));
	}
	return 0;
}

在本段代码中,   double arr[5] = { 0 };    double* p = arr;         定义了double类型的arr[5]数组,因此指针p指向的也应该为double型,所以定义为 :  double* p = arr;

对于下面简短代码,在笔者博客前文略有涉及,描写也算较为全面,但是对于一些不愿意找的读者而言,笔者还是再来进行简单描写一边吧!

     for (i = 0; i < 5; i++)
	{
		arr[i] = i + 1;             //在每次循环的基础上,将元素赋值为i+1
 
		printf("%lf ", *(p + i));
	}

在这个代码片段中,用for循环,实现每次循环下来 i 的值每次都增加1,然后在每次循环时候都用  i +1赋值给数组arr[];最后输出时候,用printf("%lf ", *(p + i));在这里,p+i指:每次循环数组地址都往后走i步,找到位于arr[i]上的元素位置!因为i的取值在  :   i=0;i<5;i++   范围内,因此也不担心越界问题!最后在通过  * (解引用操作符)的使用,最后通过地址找到该元素的大小数值并打印出来!

因此最后的打印结果为:

 指针的比较大小

对于刚开始接触指针的大小比较时候,笔者也是一脸迷茫,但是,当慢慢学习接触下来发现还是挺有必要的!

 下面笔者用一个代码片段在进行讲解一下!

#include <stdio.h>
 
#define n_ualue 5
 
int main()
{
	float valuer[n_ualue];
	float* vp;
 
	//指针的加减整数,指针的关系运算
	for (vp = &valuer[0]; vp < &valuer[5];)
	{
		*vp++ = 0;
		//printf("%f ", *vp);
	}
	return 0;
}

在这里面涉及到的内容由如下解释:

 对于*vp ++而言;  ++的优先级高于:*   因此先进行++选项,但是对于该:  *vp ++  而言,为后置++,因此又有表达式的值仍为  vp;

在for循环中: for (vp = &valuer[0]; vp < &valuer[5];)    这个代码,不建议大家进行使用,当然笔者用该段代码仅仅是供大家参考:*vp ++  的用法而已!

因此得出来:

*vp++   跟    *(vp++)意思一样

              (*vp)++意思不一样 : (*vp)指:先跟vp解引用,在用++

我们大家都知道:随着数组下标由低到高的增长,由地址到高地址!

因此:上述代码:在for循环中:

for (vp = &valuer[0]; vp < &valuer[5];)
	{
		*vp++ = 0;
		//printf("%f ", *vp);
	}

可以改写为:

for (&valuer[n_ualues - 1]; vp >= &valuer[0]; vp--)
{
	*vp = 0;
}

到此为止,对于指针的运算系列(1):指针加减整数; 指针的比较大小,已经完美结束,读者要是有疑惑,请联系笔者进行删改!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。