数组做形参的疑问

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;
}

各位帮我看看,我的疑问都在上面,谢谢大家了
...全文
173 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来访问。

65,211

社区成员

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

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