指针引用数组元素

  • 方法一、下标法 : 如a[i]形式
  • 方法二、指针法 : 如*(a+i)、*(p+i)形式。其中a是数组名,p是指向数组元素的指针变量

** 问题:有一个整形数组a,有10个元素,要求输出数组中的全部元素**

  1. 下标法
#include<stdio.h>int main(){int a[5]={5,0,3,1,2};for(int i=0;i<5;i++){printf("%d ",a[i]);}printf("\n");return 0;
}
  1. 通过数组名计算数组元素的地址,找出元素的值
#include<stdio.h>int main(){//若需手动输入可以在循环中使用:scanf("%d",a+i);来代替scanf("%d",&a[i]);int a[5]={5,0,3,1,2};for(int i=0;i<5;i++){printf("%d ",*(a+i));}printf("\n");return 0;
}

或者:

#include<stdio.h>int main(){int a[5]={5,0,3,1,2};int *p=a; //另外用指针指向数组,但不能写成: int *p=&a;(错误原因:cannot convert from 'int (*)[5]' to 'int *')for(int i=0;i<5;i++){printf("%d ",*(p+i));}printf("\n");return 0;
}

补充说明:

#include<stdio.h>int main(){int a[5]={5,0,3,1,2};int (*p)[5]=&a; // 可以用指向一维数组的指针实现//(*p)[5]: //类型表示:int (*)[4];//含义:p为一个指针变量,指向含有5个元素的一维数组;//多用于多维数组的处理中;for(int i=0;i<5;i++){printf("%d ",*(*(p)+i));}printf("\n");return 0;
}
  1. 用指针变量指向数组元素
#include<stdio.h>int main(){int a[5]={5,0,3,1,2};int *p;for(p=a;p<(a+5);p++){printf("%d ",*p);}printf("\n");return 0;
}

用指针变量输入数据并输出数据

#include<stdio.h>int main(){int a[5];int *p=a;for(int i=0;i<5;i++){//输入操作scanf("%d",p+i);//等价scanf("%d",p++);//等价于scanf("%d",&a[i]);//等价于scanf("%d",a+i); //a代表数组首元素地址,它是一个指针型常量,程序运行期间值不变(不同于p),故不能用a++;}//输出方式一:用 a[i] 或用 *(a+i) ; 但不能使用a++(原因:a是指针型常量)for(i=0;i<5;i++){printf("%d ",a[i]);//等价于 printf("%d ",*(a+i));}printf("\n");p=a;//必须把指针重新指向a的首元素//输出方式二:用 *(p+i) 或者 *p++ ; 注意:要把指针重新指向a的首元素for(i=0;i<5;i++){printf("%d ",*(p+i));//等价于 printf("%d ",*p++);}printf("\n");//输出方式三:用*pfor(p=a;p<(a+5);p++){printf("%d ",*p);}putchar(10);//等价于printf("\n");return 0;
}

注意

  1. *p++ : 等同于 *(p++);因为++和 *同优先级;先引用p的值,实现 *p的运算,然后p自增1;
  2. *(p++) 不等同于 *(++p) ;(假设p的初值为a,即&a[0])
    前者 *(p++) :① *p ②p++ ; 若输出 *(p++),得到a[0]的值;
    后者 *(++p):①p++ ② *p; 若输出 *(++p),得到a[1]的值;
  3. ++(*p):表示p所指向的元素值+1;假设p=a,则++(*p)相当于++a[0];
    注意:是元素的值加1,而不是指针p的值加1;

看个小练习:

C程序设计--指针(对 “ 数组 ” 进行输入输出操作)相关推荐

  1. C语言文件与数组之间输入输出操作

    C语言文件与数组之间输入输出操作 文件存到数组里面: #include<iostream> #include<fstream> #include<string> # ...

  2. C语言程序设计 | 指针(二):常量指针和指针常量、数组参数和指针参数、函数指针数组

    指针的进阶(二)目录: 常量指针和指针常量 数组参数和指针参数 函数指针数组 常量指针和指针常量 在我们日常中,经常会用到一个关键字const const是一个C语言(ANSI C)的关键字,具有着举 ...

  3. C程序设计语言--第五章:指针与数组

    为什么80%的码农都做不了架构师?>>>    指针是一种保存变量地址的变量. 5.1 指针与地址 通常的机器都有一系列连续编号或编址的存储单元,这些存储单元可以单个进行操纵,也可以 ...

  4. c语言程序设计实验周信东指针,C语言程序设计实验4数组周信东

    1.实验 4 数 组姓名:XXX 学号: 实验日期:XXX1. 实验目的和要求(1)掌握一维数组与二维数组的定义.使用及初始化方法.(2)学习数组作为函数参数的用法.(3)掌握字符数组和字符串函数的使 ...

  5. 《C程序设计语言》笔记 (五) 指针与数组

    5.1 指针与地址 指针是一种保存变量地址的变量ANSI C使用类型void*(指向void的指针)代替char *作为通用指针的类型一元运算符&可用于取一个对象的地址: p = &c ...

  6. C程序设计语言现代方法12:指针和数组

    目录 1. 指针的算术运算 1.1 概述 1.2 C语言支持的算术运算类型 2. 指针的比较 3. 指针用于数组处理 4. 数组名与指针 4.1 用数组名作指针 4.2 数组取下标操作 4.3 惯用法 ...

  7. 程序设计基石与实践之C语言指针和数组基础

    英文出处:Dennis Kubes:  <Basics of Pointers and Arrays in C>. 关于C语言中指针和数组的争论就像是一场恶战.一方面,有些人觉得,所有人都 ...

  8. php指针取数组元素,php实现数组指针操作详解

    本文主要介绍了php数组指针操作.具有很好的参考价值,下面跟着小编一起来看下吧 数组指针的操作: 移动数组指针的操作: Next() 向下 同时会获得当前元素的值. Prev() 向上同时会获得当前元 ...

  9. 哈工大c语言指针实验题,C语言程序设计_哈工大(2):指针与数组.pdf

    圳 职 业 技 术 学 院Shenzhen Polytechnic 七单元(2):指针与数组 教学内容 指针与数组 教学目标 应知 数组的指针的意义,数组元素的指针的意义,数组名作函 数参数 应会 通 ...

  10. c语言程序设计 周信东 数组,c语言程序设计周信东数组

    c语言程序设计周信东数组Tag内容描述: 1.第六章 数 组,数组的定义:是有序数据的集合. 数组的特点:数组中的每个元素都属于同一数据类型. 数组的访问:我们用一个统一的数组名和下标来唯一地确定数组 ...

最新文章

  1. jackson stax2-api
  2. T-SQL中的GROUP BY GROUPING SETS
  3. 一篇详文带你入门 Redis
  4. resultset需要关闭吗_旧电脑福音!关闭Windows这些没用的设置,电脑性能至少提升50%!...
  5. java自适应table_Java 设置Word中的表格自适应的3种方式
  6. 私人心情录小程序源码
  7. 基于python的贝叶斯分类算法_Python实现贝叶斯分类器
  8. STM32工作笔记0072---UCOSIII在STM32F103上的移植
  9. 文本视图(UITextView)占位符Swift
  10. 智能优化算法:野狗优化算法 - 附代码
  11. node-schedule的定时任务表达式
  12. 软考-中级-网络工程师-知识点个人总结(八)
  13. Windows下MySQL5.7压缩包安装教程
  14. 怎样从下载的MP4视频中将音乐提取出来?
  15. 数字图像处理笔记(九)基本的形态学算法
  16. Oracle dba_users视图
  17. button layui-btn 色调
  18. 15.(cesium之家)cesium暗色系地图样式地图(滤镜实现,反色滤镜)
  19. Python的io模块详解
  20. EBS R12多组织访问控制

热门文章

  1. 转载 《Python爬虫学习系列教程》学习笔记
  2. vmware workstation 12安装ubuntu kylin 16.04虚拟机
  3. 简单实现ToolStripMenuItem(菜单栏)的单选效果
  4. 学生的认知风格类型有哪些_《认知天性》读书笔记
  5. fckeditor for php 下载,FCKeditor 的配置和使用方法(for PHP)
  6. oracle mrp mps mds 的table关联,ORACLE中的计划-Forecast/MDS/MPS/MRP(转)
  7. java中不使用局部变量a的值_【转发】Java匿名类中使用的局部变量为何要加final...
  8. java ip范围_Java判断IP是否在指定范围
  9. 多叉树的深度优先遍历并输出叶子路径
  10. 跨域将.net 工程嵌入别的系统页面中发生的js、ajax的拒绝访问的错误