数组做形参的疑问

sallan 2009-02-24 10:41:02
#include <iostream>
using namespace std;

void InsertEx(int a[], int i);
void InsertSort(int a[], int n)
{
for (int i = 1; i < n; i++)
{
InsertEx(a, i);
// 我的疑问在这里,每次循环的时候,a是怎么找到自己的值得,如果数组名就是指针的话
那么在i == 1的情况下,怎么确定a是2, 而不是4呢?
}
}

void InsertEx(int a[], int i)
{
int temp = a[i];
int test = 0;
int j = i;
while (j > 0 && a[j] < a[j - 1])
{
test = a[j];
a[j] = a[j - 1];
a[j - 1] = test;
j--;
}
a[j] = temp;
}

void main(void)
{
const int n = 5;
int a[n] = {4, 2, 8, 9, 3};
InsertSort(a, n);
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
cout << endl;
}

各位帮我看看,我的疑问都在上面,谢谢大家了
...全文
172 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
a是首地址,i作为偏移量.
sagegz 2009-02-24
  • 打赏
  • 举报
回复
编译器在编译的时候都会将a[i]转换成*(a+i)的形式.
其实数组名就是数组第一个元素的地址.
sxbwelcome 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 sallan 的帖子:]
#InsertEx(a, i);
// 我的疑问在这里,每次循环的时候,a是怎么找到自己的值得,如果数组名就是指针的话
那么在i == 1的情况下,怎么确定a是2, 而不是4呢?
[/Quote]

主程序调用InsertSort时把实参a【注意是地址】传递给了InsertSort的形参a【注意这两个a不是同一个,姑且叫aa吧】
然后InsertSort又调用InsertEx,把aa的值传递给了aaa【姑且把InsertEx中的形参a称为aaa】
这样通过接力棒的形式把main函数中数组的首地址传递给了InsertEx的参数a中
在InsertEx函数中对a的访问就是对主程序中数组a的访问
a的值不可能是2或4,除非是*a,也就是a所指的内存单元的内容。
DarknessTM 2009-02-24
  • 打赏
  • 举报
回复
int a[] 形参 等同于 int * a
夹心饼干 2009-02-24
  • 打赏
  • 举报
回复
a 是一个地址,也可以理解为那一组数据的标志符,a的类型不同,a对应的那快地址的值是a,a+sizeof(int),a+sizeof(int),......

a[0]| a[1] | a[2] | a[3] | a[4] |
地址:a a+sizeof(int),.........
lingyin55 2009-02-24
  • 打赏
  • 举报
回复
数组名相当于数组的首地址,取数组的元素是通过i的偏移来取的,在i == 1的情况下,a[1]当然就是2了。
waizqfor 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 sallan 的帖子:]
#include <iostream>
using namespace std;

void InsertEx(int a[], int i);
void InsertSort(int a[], int n)
{
for (int i = 1; i < n; i++)
{
InsertEx(a, i);
// 我的疑问在这里,每次循环的时候,a是怎么找到自己的值得,如果数组名就是指针的话
那么在i == 1的情况下,怎么确定a是2, 而不是4呢?
}
}

void InsertEx(int a[], int i)
{
int temp = a[i…
[/Quote]
你数组a的函数调用 传进的都是数组首地址 你想得到的数据 都是通过下标的移动了来了 函数每次的传入都是这样
LZ你可以自己设置断点 跟踪一下程序的流程 单步找出a的变化
fallening 2009-02-24
  • 打赏
  • 举报
回复
a[1]=*(a+1)
Dinelgua 2009-02-24
  • 打赏
  • 举报
回复
a 值一直不变 数组首地址
变得是i 根据i的不同从a 数组起始地址开始偏移i个来获得要取得值

可以cout << a;
一直打印a的值出来,看的就比较明显了

楼主可以看看
太乙 2009-02-24
  • 打赏
  • 举报
回复
找到地址,再找偏移量
太乙 2009-02-24
  • 打赏
  • 举报
回复
a只是一个地址而已!

herman~~ 2009-02-24
  • 打赏
  • 举报
回复
数组做函数参数,退化成指针
dongpy 2009-02-24
  • 打赏
  • 举报
回复
数组名a代表数组的首地址,具体数组元素,还要通过索引i来访问。
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为前端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统前端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧