指针系列目录

  C语言指针基础知识点(一)–指针及指针变量
  C语言指针基础知识点(二)–指针变量的引用
  C语言指针基础知识点(三)–指针变量作为函数参数
  C语言指针基础知识点(四)–通过指针引用数组
  C语言指针基础知识点(五)–用数组名作函数参数
  C语言指针基础知识点(六)–通过指针引用多维数组
  C语言指针基础知识点(七)–通过指针引用字符串
  C语言指针基础知识点(八)–返回指针值的函数
  C语言指针基础知识点(九)–指针数组和多重指针
  C语言指针基础知识点(十)–动态内存分配与指向它的指针变量

通过指针引用数组元素

引用一个数组元素,可以用以下两种方法:
1.下标法,如 a[i] 形式;
2.指针法,如 *(a+i)*(p+i)。其中 a 是数组名,p是指向数组元素的指针变量,其初值为 p=a


栗子1:

有一个整型数组 a,有5个元素,要求输出数组中的全部元素

(1). 下标法

# include<stdio.h>int main()
{int i,a[5];printf("Please enter 5 integer numbers:\n");for(i=0;i<5;i++)scanf("%d",&a[i]);for(i=0;i<5;i++)printf("%d ",a[i]);printf("\n");return 0;
}

(2). 通过数组名计算数组元素地址,找出元素的值

# include<stdio.h>int main()
{int i,a[5];printf("Please enter 5 integer numbers:\n");for(i=0;i<5;i++)scanf("%d",&a[i]); // or scanf("%d",a+i)for(i=0;i<5;i++)printf("%d ",*(a+i));printf("\n");return 0;
}

(3). 用指针变量指向数组元素

法一:

# include<stdio.h>int main()
{int i,a[5],*p;p = a; // or  p=&a[0]printf("Please enter 5 integer numbers:\n");for(i=0;i<5;i++)scanf("%d",p+i);for(i=0;i<5;i++)printf("%d ",*(p+i));printf("\n");return 0;
}

法二:

# include<stdio.h>int main()
{int i,a[5],*p;printf("Please enter 5 integer numbers:\n");for(i=0;i<5;i++)scanf("%d",&a[i]);for(p=a;p<(a+5);p++)    // 错误:  for(p=a;a<(p+5);a++)  a 代表数组首元素的地址,是一个指针型常量printf("%d ",*p);   //            printf("%d ",*a);   printf("\n");return 0;
}

栗子2:

通过指针变量输出整型数组 a 的5个元素

# include<stdio.h>int main()
{int i,a[5],*p;p=a;printf("Please enter 5 integer numbers:\n");for(i=0;i<5;i++)scanf("%d",p++);for(i=0;i<5;i++,p++)    // or for(i=0;i<5;i++)printf("%d ",*p);   //        printf("%d", *p++);printf("\n");return 0;
}

结果为:

问题出在了指针变量 p 的指向上。指针 p 经过第一轮 for 循环后已经指向了数组 a 的末尾,执行第二个 for 循环时,指向 a 数组下面的10个存储单元,而这些单元中存储的值是难以预料的。

解决办法:

在第二个 for 循环之前加一个赋值语句: p = a


拓展:

while 实现输出数组 a 的前 5 个元素 :

# include<stdio.h>int main()
{int i,a[5],*p;p=a;printf("Please enter 5 integer numbers:\n");for(i=0;i<5;i++)scanf("%d",p++);p=a;while(p<a+5)printf("%d ",*p++);printf("\n");return 0;
}

C语言指针基础知识点(四)--通过指针引用数组相关推荐

  1. C语言指针基础知识点(六)--通过指针引用多维数组

    指针系列目录   C语言指针基础知识点(一)–指针及指针变量   C语言指针基础知识点(二)–指针变量的引用   C语言指针基础知识点(三)–指针变量作为函数参数   C语言指针基础知识点(四)–通过 ...

  2. C语言指针基础知识点(七)--通过指针引用字符串

    指针系列目录   C语言指针基础知识点(一)–指针及指针变量   C语言指针基础知识点(二)–指针变量的引用   C语言指针基础知识点(三)–指针变量作为函数参数   C语言指针基础知识点(四)–通过 ...

  3. OC基础第四讲--字符串、数组、字典、集合的常用方法

    OC基础第四讲--字符串.数组.字典.集合的常用方法 字符串.数组.字典.集合有可变和不可变之分.以字符串为例,不可变字符串本身值不能改变,必须要用相应类型来接收返回值:而可变字符串调用相应地方法后, ...

  4. 【C语言】指针基础知识点汇总

    指针(一) 基础 一 指针的概念 为了方便访问内存中的内容,给每个内存单元一个编号,我们称这个编号为地址,及为指针. 指针也是一种数据类型 所以指针都有自己的内存 存储的是地址(编号) 指针的四要素 ...

  5. 指针——基础知识点归纳总结

    一.指针概述 指针是用来存放地址的变量: 指针的大小是固定的4个或8个,取决于你的操作系统(32位/64位): 指针的类型决定了指针的步长和访问权限: 指针的运算规则: 二.字符串指针 字符串的名称为 ...

  6. c语言编程基础第四版电子教案,《C语言编程基础》电子教案.doc

    <C语言编程基础>电子教案 课题(内容)1.1 C语言简史及特点课时1教学任务分析教学目标知识技能通过本节课的教学,使学生了解并熟悉编程语言C的发展历史.特点及其种类和适用范围.过程与方法 ...

  7. printf 指针地址_c语言入门 第十四章指针

    我们之前研究的数据类型, 语句, 函数等等,这些内容可以认为是编写程序的基础,除了c语言之外,在其他的编程语言当中也会有相似的内容 我们接下来要研究的指针,可以认为是c语言独有的特性,学会如何的使用指 ...

  8. C/C++基础知识点(四)

    文章目录 37.静态变量什么时候初始化 38.HTTP和HTTPS的区别 39.HTTPS的优缺点 40.IP地址和MAC地址的作用 41.GET和POST的区别 42.C++11中的auto不能用于 ...

  9. 怎么new一个指针_C++知识点 34:指针运算符重载 -- 智能指针

    #define _CRT_SECURE_NO_WARNINGS #include using namespace std; // 平常可能遇到一个问题 class Test { public: Tes ...

最新文章

  1. 微软VS2008月底推出beta 2中文版 搭配.NET 3.5
  2. 权威报告】WanaCrypt0r勒索蠕虫完全分析报告
  3. srs10流程图_高效的SRS资源指示方法与流程
  4. python3 可执行文件_将python3打包成为exe可执行文件(pyinstaller)
  5. 关于分布式集群的几个问题
  6. 为什么最近「骚扰电话」明显越来越多了?
  7. 计算机游戏程序启动错误及其解决方法汇总
  8. 关于用LM2596做的DC-DC数控电源
  9. Unity3D 通过脚本设置PlayerSettings的属性(GPU Skinning,Auto Graphics APi[OpenGLES2])等
  10. 53端口渗透之dns劫持与欺骗篇
  11. luogu 3426题解 (KMP)
  12. python实现ID3
  13. EasyPay(易支付)Android超简单微信支付宝支付接入
  14. 图像沿列方向降维的AVX2实现讨论
  15. A Survey of the Four Pillars for Small Object Detection: Multiscale Representation, Contextual Infor
  16. IBM x系列服务器光通路诊断灯错误解释
  17. Qt小程序之QQ登录窗口输入框控件
  18. J-Link连上电路板,keil检测不出MCU
  19. linux中realplayer.rpm格式的软件安装,Linux中安装Realplay 10.0 的方法
  20. VirtualBox磁盘扩容

热门文章

  1. 什么是Node - 学习node
  2. Smartbi“三步走”构建智慧经营分析平台,实现国有企业监管报送和数智化转型
  3. NUC-家喻户晓的中药店
  4. 2019秋招总结(非科班转互联网,请不要踩我的坑)
  5. mac美服lol怎么设置中文?英雄联盟mac版美服汉化?来看!
  6. django搜索 关键字 全文检索haystack 搜索分词数据库
  7. 应为 <statement> 或 DELIMITER,得到 ‘id‘
  8. 几分钟教你做个原创视频,赚钱引流两不误
  9. 有关付出就有收获的名人名言(精选)
  10. Win10上EMACS反应速度特别慢问题解决