这个使用指针功能的C程序出了什么问题

时间:2015-02-24 19:45:39

标签: c

当我为指针功能指定变量时,程序在运行时崩溃,但是如果我马上打印它就不会(printf(“%d”,*最大(parr,10));)

这将输出数组中最大元素的地址

#include <stdio.h>

int *Largest(int*,int);

int main (void)
{
    int arr[10] = {33,7,1,3,8,5,2,10,39,22},*parr,z;

    parr=arr;
    z = *(Largest(parr,10));
    printf ("%d",z);
}

int *Largest (int *array, int size)
{
    int i,*high;

    *high = 0;

    for (i=0;i<size-1;i++)
        if (array[i] < array[i+1]) *high = i+1;
        else *high = i;

    return high;
}

1 个答案:

答案 0 :(得分:1)

您正在错误地使用指针int *high:您根本不应在*函数中取消引用(即应用Largest运算符)它。相反,你应该对它进行“直接”分配。

首先,您应该在初始化时将指针指向array的初始元素:

int *high = array; // That's the same as &array[0]

然后,您应该在索引1开始循环,并分配high,而不是*high

for (int i = 1 ; i < size ; i++) {
    if (array[i] > *high) {
        high = &array[i];
    }
}