C语言指针基础知识点(四)--通过指针引用数组
指针系列目录
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语言指针基础知识点(四)--通过指针引用数组相关推荐
- C语言指针基础知识点(六)--通过指针引用多维数组
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- C语言指针基础知识点(七)--通过指针引用字符串
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- OC基础第四讲--字符串、数组、字典、集合的常用方法
OC基础第四讲--字符串.数组.字典.集合的常用方法 字符串.数组.字典.集合有可变和不可变之分.以字符串为例,不可变字符串本身值不能改变,必须要用相应类型来接收返回值:而可变字符串调用相应地方法后, ...
- 【C语言】指针基础知识点汇总
指针(一) 基础 一 指针的概念 为了方便访问内存中的内容,给每个内存单元一个编号,我们称这个编号为地址,及为指针. 指针也是一种数据类型 所以指针都有自己的内存 存储的是地址(编号) 指针的四要素 ...
- 指针——基础知识点归纳总结
一.指针概述 指针是用来存放地址的变量: 指针的大小是固定的4个或8个,取决于你的操作系统(32位/64位): 指针的类型决定了指针的步长和访问权限: 指针的运算规则: 二.字符串指针 字符串的名称为 ...
- c语言编程基础第四版电子教案,《C语言编程基础》电子教案.doc
<C语言编程基础>电子教案 课题(内容)1.1 C语言简史及特点课时1教学任务分析教学目标知识技能通过本节课的教学,使学生了解并熟悉编程语言C的发展历史.特点及其种类和适用范围.过程与方法 ...
- printf 指针地址_c语言入门 第十四章指针
我们之前研究的数据类型, 语句, 函数等等,这些内容可以认为是编写程序的基础,除了c语言之外,在其他的编程语言当中也会有相似的内容 我们接下来要研究的指针,可以认为是c语言独有的特性,学会如何的使用指 ...
- C/C++基础知识点(四)
文章目录 37.静态变量什么时候初始化 38.HTTP和HTTPS的区别 39.HTTPS的优缺点 40.IP地址和MAC地址的作用 41.GET和POST的区别 42.C++11中的auto不能用于 ...
- 怎么new一个指针_C++知识点 34:指针运算符重载 -- 智能指针
#define _CRT_SECURE_NO_WARNINGS #include using namespace std; // 平常可能遇到一个问题 class Test { public: Tes ...
最新文章
- 微软VS2008月底推出beta 2中文版 搭配.NET 3.5
- 权威报告】WanaCrypt0r勒索蠕虫完全分析报告
- srs10流程图_高效的SRS资源指示方法与流程
- python3 可执行文件_将python3打包成为exe可执行文件(pyinstaller)
- 关于分布式集群的几个问题
- 为什么最近「骚扰电话」明显越来越多了?
- 计算机游戏程序启动错误及其解决方法汇总
- 关于用LM2596做的DC-DC数控电源
- Unity3D 通过脚本设置PlayerSettings的属性(GPU Skinning,Auto Graphics APi[OpenGLES2])等
- 53端口渗透之dns劫持与欺骗篇
- luogu 3426题解 (KMP)
- python实现ID3
- EasyPay(易支付)Android超简单微信支付宝支付接入
- 图像沿列方向降维的AVX2实现讨论
- A Survey of the Four Pillars for Small Object Detection: Multiscale Representation, Contextual Infor
- IBM x系列服务器光通路诊断灯错误解释
- Qt小程序之QQ登录窗口输入框控件
- J-Link连上电路板,keil检测不出MCU
- linux中realplayer.rpm格式的软件安装,Linux中安装Realplay 10.0 的方法
- VirtualBox磁盘扩容
热门文章
- 什么是Node - 学习node
- Smartbi“三步走”构建智慧经营分析平台,实现国有企业监管报送和数智化转型
- NUC-家喻户晓的中药店
- 2019秋招总结(非科班转互联网,请不要踩我的坑)
- mac美服lol怎么设置中文?英雄联盟mac版美服汉化?来看!
- django搜索 关键字 全文检索haystack 搜索分词数据库
- 应为 <statement> 或 DELIMITER,得到 ‘id‘
- 几分钟教你做个原创视频,赚钱引流两不误
- 有关付出就有收获的名人名言(精选)
- Win10上EMACS反应速度特别慢问题解决