Передача массива в функцию изменяет функцию sizeof(array)

РЕДАКТИРОВАТЬ: я считаю, что этот вопрос отличается от Как мне определить размер моего массива в C?, потому что эта ссылка обсуждает, как использовать sizeof(nlist)) / sizeof(nlist[0]) определить количество элементов в массиве.

Мой вопрос спрашивает, почему это перестает работать после того, как массив был передан функции.

===

Я новичок в ANSI C, пришедший из Python.

У меня есть функция, которая анализирует int массив. Итерация по массиву зависит от sizeof(nlist)) / sizeof(nlist[0]) определить размер массива.

Однако пока это работает в main(), он терпит неудачу, когда массив передается функции.

В основном файле

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "arrayTools.h"

int main() {

    // Fill with data for testing
    int nlist[500];
    for (int i=1; i<501; i++ ) {
        nlist[i] = i;
    }

    // This successfully iterates through all 500 items
    for( size_t i = 1; i <= (sizeof(nlist)) / sizeof(nlist[0]); i++)
    {   
        printf(isItemInIntArray(i, nlist) ? "true\n" : "false\n");
    }

arrayTools.h

#include <stdbool.h>
#include <stdlib.h>

bool isItemInIntArray(int value, int arr[]){
    // This only iterates twice (i = 1, then i = 2) and then ends
    for( size_t i = 1; i <= (sizeof(arr)) / sizeof(arr[0]); i++) {
        if (value == arr[i]) { return true; }
    }
    return false;
}

0 ответов

Другие вопросы по тегам