2013-08-26 100 views
1

嘿,我試圖打印使用函數和指針數組中的最大元素。下面是我的代碼,但它的打印垃圾值。請幫忙。試圖打印數組的最大值..但打印垃圾

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); 
} 

回答

4

隨着findMax(int arr[], int n, int* pToMax)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, &ptr);

+0

耶做到了自己的方式,但它的打印的第一個元素爲最大。另外* ptomax將存儲值(作爲指針工作),爲什麼存儲地址? – Crayator

+0

@Devlin沒有它沒有看到[這裏](http://ideone.com/Rq2ZAJ) – P0W

+0

你不認爲傳遞ptr就像傳遞地址...因爲它的所有指針和ptr都會通過地址本身。如果我錯了,請解釋。 – Crayator