C数组的值,指针分割错误

时间:2017-12-13 12:37:11

标签: c arrays algorithm pointers max

在我的main()函数中,我创建一个数组,找到最高值的地址并增加该地址的值:

int main()
{
    int i[5] = {2,5,6,5,3};
    int *pi = getAdres(i);
    (*pi)++;

    printf("%d", i[2]);
    return 0;
}

getAdres()函数如下所示:

int getAdres(int *i)
{
    int *pi;
    int higest = 0;
    for(int j = 0; j < 5; j++)
    {
        if(i[j] > higest)
        {
            pi = &i[j];
            higest = i[j];
        }
    }
    return pi;
} 

不将get地址部分放入函数中它可以工作但是在当前格式(*pi)++;给我一个分段错误。 出了什么问题?

2 个答案:

答案 0 :(得分:2)

你的回复类型错误,请点击:

int * getAddressToMax(int *i);

还要确保它确实返回有效指针。如果整个数组为0,它将返回一个未初始化的指针,这是一个非常糟糕的主意。成功:

int *pi = i;

使其返回指向第一个元素的指针,在这种情况下。

你也常常看到:

int highest = i[0];

然后从1开始循环,对于这样的情况。传递数组的长度在实际代码中也是非常常见的,硬编码那些可能是通用函数的知识会使事情变得更难理解(并且当然会杀死代码重用)。

答案 1 :(得分:2)

函数<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app" ng-controller="ctrl"> <h5>auto focus on next input, auto push [press Enter on inputs]</h5> <ol class="parent"> <li ng-repeat="li in ul" class="child-{{$index}}"> <input type="text" ng-keydown="callService($event, $index)" ng-model="li.input" /> </li> </ol> </div>的返回类型为getAdres,而不是int

int *

但无论如何它的实施都很糟糕。它使用幻数5,而且传递给函数的任意数组只能有负值。

例如,函数定义可以看起来像

int getAdres(int *i)
^^^

该功能可以像

一样调用
int * getMaxElement( const int *a, size_t n )
{
    size_t highest = 0;

    for ( size_t i = 1; i < n; i++ )
    {
        if ( a[highest] < a[i] )
        {
            highest = i;
        }
    }

    return ( int * )a + highest;
}