首页 新闻 会员 周边 捐助

C++数组形参

0
[已解决问题] 解决于 2015-04-21 18:27
#include<iostream>
using namespace std;

void print(const int ia[10])
{
    for(int i=0;i!=10;i++)
        cout<<ia[i]<<endl;
}

int main()
{
    int a[10]={2,5,2,1,5,4};
    print(a);
}

这段代码中的 print函数中  cout<<ia[i]<<endl;为什么能通过呢?

不是说ia是一个指针?    ----(可能是我一下子没转过来,虽然很low, 但还是望大家指点)

此外, 我将其改为  cout<<*(ia+i)<<endl; 肯定是对的,这个还是比较好理解.

-------------------------------------------

总结问题:  ia作为原本数组a[10]首地址的指针的copy, 那么也同时具有了数组的特性? 能够直接将其表示为  ia[i]的形式 ?

于是乎, 做了个test:

#include<iostream>
using namespace std;

int main()
{
    int a[]={2,4,5,6,2};
    int *ia=a;
    cout<<ia[2]<<endl;
}

也顺利完成了使命.  

那么,  是否   ia作为原本数组a[10]首地址的指针的copy, 那么也同时具有了数组的特性? 能够直接将其表示为  ia[i]的形式 ?    这个问题答案是肯定的呢------是索引符的问题?

又奇葩的试了下如下形式:

#include<iostream>
using namespace std;

int main()
{
    int a=2;
    int *ia=&a;
    cout<<ia[0]<<endl;
}

也OK!!!!!!

那么是否我以后不写解引用直接利用类似  ia[0]也代表解引用呢?!!!

-------------------------------------------------------------

讲的比较乱,希望解答下这个困惑. Thank you~

C++
Nooooooo的主页 Nooooooo | 初学一级 | 园豆:192
提问于:2015-04-21 17:38
< >
分享
最佳答案
1

你的理解是对的。

指针只是一个地址,可以当作数组使用。

只是 “那么是否我以后不写解引用直接利用类似  ia[0]也代表解引用呢?!!!”没理解。

另外:

print函数一般定义成:

print(const int *a, int length)

奖励园豆:5
519740105 | 大侠五级 |园豆:5810 | 2015-04-21 18:02

恩!  谢谢~  函数只是测试(但也说明了习惯问题>.<). 很感谢.   

那么是否我以后不写解引用直接利用类似  ia[0]也代表解引用呢----这句话想表达的就是这两者之间能替换,任何指针的解引用都等效于 a[0]    即,   *a==ia[0] 是完全等效的(不仅仅针对数组.)---当然,写的时候基本不会写ia[0].

很谢谢~

Nooooooo | 园豆:192 (初学一级) | 2015-04-21 18:22

@Tinyshine: 对。*a == ia[0]

519740105 | 园豆:5810 (大侠五级) | 2015-04-21 18:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册