关于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代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...
随机推荐
- Java异常的一个小知识
有以下两个代码: package com.lk.A; public class Test3 { public static void main(String[] args) { try { int a ...
- 重构5-Pull Up Field(字段上移)
我们来看看一个和上移方法十分类似的重构.我们处理的不是方法,而是字段. public abstract class Account{} public class CheckingAccount ext ...
- struts2+jquery 实现ajax登陆
一.新建一个web项目:test,配置好struts2的环境(详细配置见:http://www.cnblogs.com/wuweidu/p/3841297.html) 导入Jquery的j ...
- 文本的输入输出(page52)
2.2.4 再谈输入输出, 所用java类有:Out.java , In.java public class Cat{ public static void main(String[] args){ ...
- Gstreamer基本概念介绍(开发前必读)
1. 元件(Elements) 元件(element)是GStreamer中最重要的概念.你可以通过创建一系列的元件(Elements),并把它们连接起来,从而让数据流在这个被连接的各个元件(Elem ...
- PF防火墙
PF防火墙 点击认领 PF防火墙 ( 全称:Packet Filter ) 是 UNIX LIKE 系统上进行 TCP/IP 流量过滤和网络地址转换的软件系统.PF 同样也能提供 TCP/ ...
- hdu 4411 最小费用流
思路:主要就是要把一个每个城市拆为两个点,建一条容量为1,费用为-inf的边,保证每个城市都会被遍历. /*最小费用最大流*/ #include<iostream> #include< ...
- Python(2.7.6) 标准日志模块的简单示例
Python 标准库中的 logging 模块提供了一套标准的 API 来处理日志信息的打印. import logging logging.basicConfig( level = logging. ...
- java之旅——JDK版本下载
作为一名IT工作者,技术学无止境,最近开始学习java. 学习java就需要安装jdk,直接到官网上下载,总是找不到很好的版本,在资源中找到一个下载jdk的链接,想下载哪个版本都有. http://w ...
- AngularJS尝鲜一
第一个小例子,体验一下: <!DOCTYPE html> <html> <head> <title>Index</title> </h ...