2016-02-03 2 views
-2

Я написал небольшую программу для определения минимального элемента в массиве a[]. Когда я отлаживаю, программа, кажется, работает нормально, но затем цикл for в функции min() прекращает выполнение после двух шагов, несмотря на размер массива размером 10.Вычисление минимального элемента в массиве

Конечный результат 23, когда он может быть 3 .

Действительно указан код sizeof(a)/sizeof(int)? Я нашел его на другом article на stackoverflow.

#include <stdio.h> 
#include <limits.h> 

int min(int[]); 

int main(){ 
    int a[]={100,23,3,4,5,6,7,8,9,10}; 
    printf("%d", min(a)); 
    return 0; 
} 

int min(int a[]){ 
    int min = INT_MAX, i; 
    for(i = 0; i < sizeof(a)/sizeof(a[0]); i++){ 
     if((i>=0) && (a[i]< min)) 
      min = a[i]; 
    } 
    return min; 
} 
+2

Когда вы передаете массив функции, он распадается на указатель. Выполнение 'sizeof' на указателе дает только размер указателя, а не то, на что указывает. –

+0

В этом случае это не так. См. Второй ответ на связанный с вами вопрос. – user694733

+0

@ Luke Collons: Поскольку Joachim Pileborg упоминается в комментарии, просто найдите размер массива, используя 'sizeof (a)/sizeof (a [0])' и передайте его функции 'min' в качестве второго аргумента и используйте его в' min' function , –

ответ

1

Внутри функции a представляет собой указатель на массив целых чисел, так что sizeof(a) возвращает размер указателя, который, как правило, 4 или 8 байт в зависимости от системы. Говоря это, невозможно подсчитать количество элементов в массиве C, используя sizeof(a)/sizeof(a[0]) внутри функции. Вам нужно передать количество элементов явно как аргумент функции.

int min(int a[], int n) { 
    ... 
    for (i = 0; i < n; i++) {...} 
    ... 
} 

printf("%d", min(a, sizeof(a)/sizeof(a[0]))); 
+0

Вниз, так как этот вопрос уже был дан более подробно в других вопросах. – user694733

+0

Вы говорите: * a является указателем на целочисленный массив * ', но a' не является указателем на целочисленный массив. – 2501

+0

@ user694733, я написал ответ, прежде чем увидеть дублируемую ссылку. Не уверен, достаточно ли оснований для голосования. – taskinoor

Смежные вопросы