我想找到一个现在减小尺寸的新阵列的大小。但是当我为新替换的数组编写size函数时,它不会返回确切的值,它只返回大小为n2 = 1,当它的大小为n2 = 4时。
#include <stdio.h>
void dupsRemove (int *arr, int n)
{
int i,newA[10],n2;
for (i=0; i<n; i++)
{
if (arr[i] == arr[i+1])
{
i++;
}
printf("%d ",arr[i]);
}
n2 = sizeof(arr)/sizeof(arr[0]);
printf("\n %d",n2);
}
int main()
{
int arr[]={1,3,3,2,5},i,j;
int n= *(&arr + 1) - arr;
dupsRemove(arr,n);
}
答案 0 :(得分:1)
将数组传递给C中的任何函数后,变量将被转换为函数原型中定义的变量。
在dupsRemove(int * arr,int n)的范围内,arr的类型为(int *),其大小以sizeof(arr)= 8或4给出,具体取决于您使用的是64位还是32位位编译器。
在函数范围内拥有数组大小的唯一选择是将数组的大小作为参数发送,并在修改数组时相应地更改它。