问答详情
源自:6-6 数组的应用(二)

关于数组的问题,自定义getindex函数中参数1为arr[5],为什么下面调用的时候参数是arr?我觉得应该是arr[];

#include <stdio.h>

int getIndex(int arr[5],int value)

{

    int i;

    int index;

    for(i=0;i<5;i++)

    {

       /* 请完善数组查询功能 */

       if(arr[i]==value)

       {

          index=i;

          break;

       }   

       else

          index=-1;

    }

    return index;

}


int main()

{

    int arr[5]={3,12,9,8,6};

    int value = 8;

    int index = getIndex(arr , value);      //这里应该传什么参数呢?

    if(index!=-1)

    {

        printf("%d在数组中存在,下标为:%d\n",value,index);             

    }

    else

    {

        printf("%d在数组中不存在。\n",value);    

    }

    return 0;    

}


提问者:BOOMkidding_girl 2016-11-23 17:31

个回答

  • TigerSleepy
    2016-11-25 22:17:09
    已采纳

           1当把 数组名 传递给一个函数时,实际上传递的事该数组第一个元素的地址。2在被调用函数中,该参数是一个局部变量,因此,数组名参数必须是一个 指针 ,也就是一个存储地址的变量。(也就是被调用函数参数必须是指针才能在主函数数组成员中移动)

          数组名所代表的就是就是该数组最开始的一个元素的地址。arr对应的就arr数组首地址。

          数组类型的变量或表达式是该数组第0个元素的地址,例如: 

    p=&a[0]和p=a是等价的,(p是指针,a是数组)

         在被调用函数中(getlndex)形式参数中 int arr[]和int *arr是等价的

         在调用函数(main)中,由于传递参数是指针,对应主函数传递参量也是指针如;arr,arr+0(指针有移动0位),&arr[0],是正确的,而arr[],arr[5]都是错的

         但数组名和指针的一个区别是指针是变量,数组不是变量。p=a和p++是合法的,但a=p和a++是不合法的

  • BOOMkidding_girl
    2016-11-23 17:33:42

    恩恩,数组不应该是arr[]这样吗,arr什么鬼可以这样用啊,,