关于C语言指针中的p++与p+i
先看一组代码:
#include <stdio.h>
void main()
{
int i,*p,a[7];
p=a;
for(i=0;i<7;i++)
scanf("%d",p++);
printf("\n");
for(i=0;i<7;i++,p++)
printf("%d",*p);
}
我们输入7个数,但输出的结果却是随机数。产生的原因为程序执行完第一组for循环后,指针已经指到了数组后的内存单元,如果想要输出该数组元素,则需重新将其首地址赋值给p(p=a)。
以下是改正的版本————————————————
当然我们还可以将p++替换为p+i;以下为参考代码————————————————
#include <stdio.h>
void main()
{
int i,*p,a[7];
p=a;
for(i=0;i<7;i++)
scanf("%d",p+i);
printf("\n");
for(i=0;i<7;i++)
printf("%3d",*(p+i));
}
其好处是从第二次循环后都不需要重新将指针指回数组首元素。
方法 | a[0]地址 | a[1]地址 | a[i]地址 |
通过数组元素名 | a[0] | a[1] | a[i] |
通过数组名a | *a | *(a+1) | *(a+i) |
通过指针变量p | *p | *(p+1) | *(p+i) |
下标法 | p[0] | p[1] | p[i] |
因为p指向a的首地址,即a[0],所以a[i]=>*(a+i)=>*(p+i)。
下一题用p+i有明显的优势————————
输入十名学生成绩,计算平均分,输出高于平均分的成绩,使用指针完成该操作。
我们先用p++,可以看到每循环一次都得重置p=a;
#include <stdio.h>
void main()
{
int a[10],sum=0,*p,i;
float v;
p=a;
for(i=0;i<10;i++,p++)
scanf("%d",p);
p=a;
for(i=0;i<10;i++,p++)
sum+=*p;
v=sum/10;
printf("%f\n",v);
p=a;
for(i=0;i<10;i++,p++)
if(*p>v) printf("%3d",*p);
}
而用p+i的话则不需要————————————
#include <stdio.h>
void main()
{
int a[],*p,i,sum=;
float v;
p=a;
for(i=;i<;i++)
scanf("%d",p+i);
for(i=;i<;i++)
sum+=*(p+i);
v=sum/;
printf("%f\n",v);
for(i=;i<;i++)
if(*(p+i)>v) printf("%3d",*(p+i));
}
关于C语言指针中的p++与p+i的更多相关文章
- C语言指针转换为intptr_t类型
1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...
- [转]C语言指针学习经验总结浅谈
指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...
- iOS学习07之C语言指针
本次随笔主要是为了学习和理解C语言中的指针,指针树状图如下: 1.访问数据的两种方式 1> 直接访问:定义变量后,直接访问变量 ; printf("a = %d\n", a) ...
- 不可或缺 Windows Native (7) - C 语言: 指针
[源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...
- C语言指针学习
C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...
- c语言指针详解(转载)
转自(http://blog.csdn.net/ad_ad_ad/article/details/1522145) 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指 ...
- (转载)c语言指针学习
前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...
- 关于C语言指针的问题
在学习关于C语言指针的时候,发现这样一个问题,代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h&g ...
- C语言指针类型 强制转换
关于C语言指针类型 强制转换 引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...
随机推荐
- [Android]天气App 2 项目搭建
对于天气App,为了简化一些功能,暂时模仿MUUI系统提供的那个App. 本项目需要引入本人经常使用的一个工具库DroidTool,这个是本人根据工作中,收集到一些工具类,下载地址. ...
- javascript跨域请求RESTful Web Service
跨域请求RESTful Web Service 当我们用js请求RESTful Web Service的时候,通常会出现跨域无法访问的问题,也就是无法正常得到我们要的值.jsonp是个解决问题的方法. ...
- 转: React系统的入门系统
评注:React系统的入门系统. 转: http://www.infoq.com/cn/search.action?queryString=%E6%B7%B1%E5%85%A5%E6%B5%85%E ...
- 用xcode6.3编译早期工程时出现Undefined symbols for architecture x86_64错误的解决办法(转)
Xcode升级到5.1 新特性之一就是默认让所有App都通过64位编译器编译.原来在Xcode5.0.x的时候默认的Standard architectures只有(arm7,armv7s),到5.1 ...
- AngularJS简单用法
一.数据绑定 AngularJS的双向数据绑定,意味着你可以在Mode(JS)中改变数据,而这些变动立刻就会自动出现在View上,反之亦然.即:一方面可以做到model变化驱动了DOM中元素变化,另一 ...
- JavaScript--基本包装类型(13)
// JS为了便于操作基本类型,提供了3个特殊的引用类型:Boolean/Number和String; 一 基本包装类型概述 // 实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装 ...
- CSS3--幽灵按钮特效(实例)
先预览效果 其中用到了CSS3的Transition属性:设置动画时间.效果:Transform属性:设置元素旋转.位移:box-sizing属性:以特定的方式定义某个区域的特定元素: 制作小三角方法 ...
- 解决discuz模板插入jvascript脚本问题(Unexpected token <)
问题描述: 最近学习discuz中要做一个焦点图,添加一个模板,让其显示后台推送图片,其中模块模板中要用到如下的代码 <div class="wrap"> <di ...
- HTTP状态码参考
1. HTTP状态码意义 客户机与服务器建立连接后,发送一个请求给服务器(如:Get /index.html http/1.1),在服务器接到请求后,给予客户机相应的响应信息,包括该信息的协议版本号. ...
- Makefile中=、:=、+=、?=的区别
=,就是基本的赋值 :=,覆盖原来的值 +=,添加新值 ?=,如果没有赋值则赋值