【问题标题】:trying to print largest value of the array..but printing garbage试图打印数组的最大值..但打印垃圾
【发布时间】:2013-08-26 16:41:41
【问题描述】:

嘿,我正在尝试使用函数和指针打印数组中的最大元素。下面是我的代码,但它的打印垃圾值。请帮忙。

void findmax(int arr[],int,int*);
void findMax(int arr[], int n, int* pToMax)
{
    if (n <= 0) 
        return;      // no items, no maximum!

int max = arr[0];
pToMax = &arr[0];

for (int i = 1; i < n; i++)
{
    if (arr[i] > max)
    {
         max = arr[i];
         pToMax = (arr+i);
    }
}
}       
int main()
{
    int nums[4] = { 5, 3, 15, 6 };
    int *ptr;
    findMax(nums, 4, ptr);
    printf("The maximum is at address %u\n", ptr);
    printf("It's at index %d\n",ptr - nums);
    printf("Its value is %d\n", *ptr);
}

【问题讨论】:

    标签: c arrays pointers printf


    【解决方案1】:

    int *pToMaxfindMax(int arr[], int n, int* pToMax)

    调用 findMax(nums, 4, ptr); 你只需将 ptr 作为值传递。

    函数退出后不会反映更新的值。

    你需要使用**pToMax

    保存地址。

    void findMax(int arr[], int n, int** pToMax)
    {
        if (n <= 0) 
            return;      // no items, no maximum!
    
    int max = arr[0];
    *pToMax = &arr[0]; //Store base address
    
    for (int i = 1; i < n; i++)
    {
        if (arr[i] > max)
        {
             max = arr[i];
             *pToMax = (arr+i); //Store max address
        }
    }
    
    }
    

    使用调用

    findMax(nums, 4, &amp;ptr);

    【讨论】:

    • 是的,它按照您的方式进行,但将第一个元素打印为最大值。 *ptomax 也将存储值(作为指针工作)那么为什么要存储地址?
    • 你不认为传递 ptr 就像传递地址......毕竟它是一个指针,而 ptr 将传递地址本身。如果我错了,请解释。
    • 嘿,谢谢伙计。你能给我一些链接或来源,我可以从中清除我的指针概念。
    • 谢谢老兄,非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多