为了账号安全,请及时绑定邮箱和手机立即绑定

这里有几处关于指针和数组的问题我不理解,求指教。


不解之处1.getMaxOrMin 函数的第一个形式参数是指针 int *arr,

http://img1.sycdn.imooc.com//55bc8ea60001487f05290474.jpg

但是为什么在main函数里调用这个函数的时候传入的参数没有加上取址符&

http://img1.sycdn.imooc.com//55bc8b5b0001ce9203960214.jpg


不解之处2. getMaxOrMin 函数的第一行内容是

int temp = arr[0];

这里使用的是arr[ ]是数组,但是为什么传参的时候形式参数是内存指针变量 int *arr 而不是指针数组 int *arr[] ?


不解之处3.getMaxOrMin 函数的形式参数写的是指针 int *arr ,但为什么函数里第一行以数组的形式引用参数的时候没有写成加上指针符号的形式

int temp = arr*[0];

而直接使用了 

int temp = arr[0];

正在回答

1 回答

C语言数组和指针的关系很密切,有时甚至不分彼此。

1. 函数声明的参数被声明为数组时,编译器会把它视作指针,指向数组元素类型。就是说

void fun(int a[]);
void fun(int *a); // 和上面是一样的

数组名在用作右值时会被自动转换成指向其首元素的指针,像传参这样直接使用数组名的情形就将其用作右值,所以传入 arr1 等同于传入 &arr1[0],这样一来传入的类型和函数参数声明的类型都是指向int的指针,完全能匹配。


2. 这就是指针和数组关系密切的另一个体现:你可以在指针后加上取下标运算符,编译器会从arr指向的内存位置开始,依照下标向后(或前)来寻址,就好象arr是数组一般。 故 arr[0]*arr 是一样的。


3. 第三个问题的前半部分已经在第一个问题的答案中了。 

后半部分你的理解错了,arr就是指针,没有什么“加上指针符号”一说。 在声明一个指针时,需要在类型后、变量名前加上*,这个*表明你要把变量名声明为一个指针。而使用指针时直接写变量名就好了,arr*[]什么的不是合法的写法。 

至于为什么可以写arr[0],我在第二问的答案中说过了。


你的三个问题其实是同一个问题,就是关于指针和数组的关系的。 前面说了很多指针和数组相通的地方,但你还要记住,它们仍是两个不同的类型,并不能简单地互换。

1 回复 有任何疑惑可以回复我~
#1

KyungLee 提问者

理解了,就是这里没搞懂!非常感谢!
2015-08-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之起航篇
  • 参与学习       291032    人
  • 解答问题       760    个

C++亮点尽在其中,本课程是在C语言基础上的一个延伸,得以升华

进入课程

这里有几处关于指针和数组的问题我不理解,求指教。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信