int *arr; ----> Pointer
int arr[8]; ----> Array
Прежде всего, что у вас есть - int *arr
это указатель, указывает на некоторые байты ячейки памяти, не массив.
Тип для Array и Pointer не совпадает .
В другой функции, в которой я передаю arr, я бы хотел определить размер (число элементов) в arr.Когда я вызываю
int arr_sz = sizeof(arr)/sizeof(int);
, он возвращает только 1, что является просто числом байтов в int для обоих аргументов, которые я предполагаю (4/4) = 1.Я просто предположил, что это будет то же самое, что использование массива
Даже если это предполагается до быть массивом - это потому, что массивы распадаются науказатели при передаче в функции.Вам необходимо явно передать размер массива в функции в качестве отдельного аргумента.
Пройдите через это:
Размер массива на языке программирования C?
Существует разница между массивом static
и динамическим распределением памяти.
Оператор sizeof не будет работать с динамическими распределениями.AFAIK лучше всего работает со стековыми и предопределенными типами.