VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 2111|回复: 63

《实用C++》第23课 数组与指针

  [复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-2-23 16:24:33 | 显示全部楼层 |阅读模式
《实用C++》第23课 数组与指针《实用C++》第23课 数组与指针

1、必要性:
指针这个东西以后真的是非常常用,所以这里再给大家讲解一下数组和指针的关系,以后也会经常用到啊,所以大家要用心学习!

2、数组元素的地址:
之前给大家讲解了每个变量都有地址,平时如果我们定义了一个变量之后可以用指针保存其地址,如下:
int a = 5;
int* pa = &a;
但如果是数组呢?大家肯定会说数组也是变量,数组中的每个元素也有地址,没错,确实是这样。但是如果一个数组中有上百上千个元素,我要得到每个数组元素的地址,用指针来保存,怎么办呢?
数组中有100个元素你就要定义100个指针,数组中有1000个元素你就要定义1000个元素。不会吧,这么麻烦?有的会员比较聪明,想到了,我可不可以也定义一个指针的数组,用来保存之前那个数组的所有元素的地址呢,答案当然是可以的,如下:
int num[100] = {0};
int* p_num[100] = {0};
for(int idx = 0; idx < 100; ++idx)
{
    p_num[idx] = &num[idx];
}

以上代码行不行?肯定是可以的,但是你不感觉麻烦吗?定义一个数组就要再定义一个指针的数组,而且还要调用循环来初始化给指针赋值,太麻烦了吧,有没有简单的办法呢?

3、数组名字就是数组的首地址:
①、为了避免上面说的情况,C/C++中规定数组名字就是数组的首地址。注意,是数组的首地址,也就是数组的第0个元素的地址,即:
int num[100] = {0};
int* pnum = &num[0];
这里的 num 和 pnum 的值应该是一样的,具体在vs中给大家看下, 具体看视频教程演示!

②、C/C++中规定如果指针变量p已经指向数组中的一个元素,则p+1指向同一数组中的下一个元素的地址(而不是将p的值简单+1),p-1同理。
int num[100] = {0};
int* pnum_0 = &num[0];
int* pnum_1 = &num[1];
pnum_0 += 1;
执行以上代码之后,这里面pnum_0的值应该和pnum_1的值是相等的。

③、所以,根据以上,针对一个数组我们只需要用数组的名字就可以得到数组中的任何一个数组元素的地址了,很方便吧?
int num[100] = {0};
那么这里面 num 就是 num[0]的地址了,即为:&num[0],那么有的会员会说 num += 1,就应该是 num[1]元素的地址了吧。大家把这句放到代码中看看能过吗?
实际上有很多初学者都遇到这个问题了,比如有个网友这几天刚发的帖子:http://www.cctry.com/thread-289301-1-1.html
答案是不行的,数组的名字确实是数组的首地址,可以把他理解为一个指针,但是这个指针是:int * const 类型的,也就是说不能改变其指向的地址。也就是说不能动是固定的。那怎么办呢,不是白费了吗?
没关系,我们可以再定义一个指针,如下:
int num[100] = {0};
int* pnum = num;
这里的 pnum 是可以移动的,所以就可以指向数组num中的任意一个元素喽!例如遍历一个数组:
int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int* pnum = num;
for(int idx = 0; idx < 10; ++idx)
{
    cout << *(pnum+idx) << endl;
}

④、访问数组的两种方法:
下标法:num[0];
指针法:*(pnum+idx)

4、用指针操作字符串数组:
定义两个字符数组输入如下:
char str1[50] = {0}, str2[] = "I Love cctry.com!";
用指针的方式,实现将 str2 拷贝到 str1 中。
具体代码见:视频教程!

5、小作业:
输入一个字符串,例如:
a123x456__17960?302ab5876
将其中连续的数字作为一个整数,依次存放到一个数组中a中,例如:123放在a[0]中,456放在a[1]中。统计共有多少个整数,并输出这些整数。

第23课免费试看,下载地址回复后可见:
游客,如果您要查看本帖隐藏内容请回复

#######################################################
获得所有教学视频、课件、源代码以及售后答疑详见:
《实用C++》:http://www.cctry.com/thread-275996-1-1.html
VC驿站官方客服QQ:8260671

#######################################################
《实用C++》第23课 数组与指针《实用C++》第23课 数组与指针

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_vip zxnnnnn 发表于 2018-2-24 10:32:56 | 显示全部楼层
支持syc 继续更新

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

10_avatar_middle
online_vip08 小菜一碟 发表于 2018-2-24 13:06:22 | 显示全部楼层
继续吧,紧跟老大进度

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

22_avatar_middle
online_vip jesy 发表于 2018-2-24 20:36:37 | 显示全部楼层
继续来学习

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

18_avatar_middle
online_vip 听雨声等你笑 发表于 2018-2-24 21:21:40 | 显示全部楼层
学习学习

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

65_avatar_middle
online_member ping170 发表于 2018-2-25 09:14:55 | 显示全部楼层
Thanks&#9834;(&#65381;ω&#65381;)&#65417;

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

74_avatar_middle
online_vip08 wssfcn 发表于 2018-2-25 10:31:02 | 显示全部楼层
看看         

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

94_avatar_middle
online_vip08 Mtong 发表于 2018-2-25 10:58:36 | 显示全部楼层
努力学习 加油吧

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

13_avatar_middle
online_vip 明天你好123 发表于 2018-2-25 14:20:32 | 显示全部楼层
hello world

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

50_avatar_middle
online_member moodsky 发表于 2018-2-25 21:28:32 | 显示全部楼层
谢谢。。。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

78_avatar_middle
online_member csa 发表于 2018-2-25 21:29:33 | 显示全部楼层
又出新课啦,谢谢

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

80_avatar_middle
online_member zp521 发表于 2018-2-26 21:37:03 | 显示全部楼层
坚持学习!!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

49_avatar_middle
online_member yuanpinq 发表于 2018-2-27 14:05:50 | 显示全部楼层
gh gh gh

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

22_avatar_middle
online_member supersct 发表于 2018-2-27 21:06:12 | 显示全部楼层
感谢楼主分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

60_avatar_middle
online_vip zy89918042 发表于 2018-2-28 12:09:58 | 显示全部楼层
支持syc 继续更新

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

98_avatar_middle
online_member tomok 发表于 2018-2-28 21:06:13 | 显示全部楼层
继续学习


发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

17_avatar_middle
online_member chenhu 发表于 2018-3-1 08:16:30 | 显示全部楼层
继续吧,紧跟老大进度

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

38_avatar_middle
online_member wangxinpeng 发表于 2018-3-2 20:47:10 | 显示全部楼层
感谢分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

04_avatar_middle
online_vip door1235 发表于 2018-3-3 19:52:39 | 显示全部楼层
谢谢分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

08_avatar_middle
online_member woliveyou 发表于 2018-3-3 21:18:26 | 显示全部楼层
《实用C++》第23课 数组与指针

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-6-24 17:12

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表