C 我有类似的代码,我想知道如何获得我传入的数组的元素数,如果有办法的话

C 我有类似的代码,我想知道如何获得我传入的数组的元素数,如果有办法的话,c,pointers,sizeof,C,Pointers,Sizeof,所以int size实际上并没有给出我在主函数中传递的内容的大小。如何获得传入的数组中元素的确切数目 void myFunc(int *array) { int size = (sizeof(&array)/sizeof(int));} int main() { int array[]={1,2,3,4,5,6,7,8,9,10,11,12,13}; myfunc(&array); return 0; } 函数无法神奇地知道,因此通常会解决以下问题: void myF

所以int size实际上并没有给出我在主函数中传递的内容的大小。如何获得传入的数组中元素的确切数目

void myFunc(int *array)
{ int size = (sizeof(&array)/sizeof(int));} 

int main()
{
 int array[]={1,2,3,4,5,6,7,8,9,10,11,12,13};
 myfunc(&array);
 return 0;
}

函数无法神奇地知道,因此通常会解决以下问题:

void myFunc(int *array, int size)
{
    int i;
    for(i=0;i<size;++i)
        array[i] = i;
}

#define ARRSZ(arr) arr, sizeof(arr)/sizeof(*arr)

int main()
{
    int array[] = {1,2,3,4,5,6,7,8,9,10,11,12,13};

    myFunc( ARRSZ(array) );
    return 0;
}
void myFunc(int*数组,int大小)
{
int i;

对于(i=0;i,函数无法神奇地知道,因此它通常是通过以下方式解决的:

void myFunc(int *array, int size)
{
    int i;
    for(i=0;i<size;++i)
        array[i] = i;
}

#define ARRSZ(arr) arr, sizeof(arr)/sizeof(*arr)

int main()
{
    int array[] = {1,2,3,4,5,6,7,8,9,10,11,12,13};

    myFunc( ARRSZ(array) );
    return 0;
}
void myFunc(int*数组,int大小)
{
int i;

对于(i=0;i将其作为参数传递给myFunc

#include <stdio.h>

void myFunc(int *array, size_t size)
{
    printf("Size = %zu\n", size);

    for (size_t i=0; i<size; i++)
    {
        printf("array[%zu] = %d\n", i, array[i]);
    }
}

int main(void)
{
    int array[]={1,2,3,4,5,6,7,8,9,10,11,12,13};

    myFunc(array, sizeof(array)/sizeof(array[0]));

    return 0;
}
#包括
void myFunc(int*数组,大小\u t大小)
{
printf(“大小=%zu\n”,大小);

对于(size_t i=0;i将其作为参数传递给myFunc

#include <stdio.h>

void myFunc(int *array, size_t size)
{
    printf("Size = %zu\n", size);

    for (size_t i=0; i<size; i++)
    {
        printf("array[%zu] = %d\n", i, array[i]);
    }
}

int main(void)
{
    int array[]={1,2,3,4,5,6,7,8,9,10,11,12,13};

    myFunc(array, sizeof(array)/sizeof(array[0]));

    return 0;
}
#包括
void myFunc(int*数组,大小\u t大小)
{
printf(“大小=%zu\n”,大小);

对于(size_t i=0;i您可以在函数中添加一个参数来表示元素的数量。还请注意,在
main
函数中,使用
&array
可以获得
int(*)类型的内容[13]
。与您希望函数接收的
int*
不完全相同。如果编译器没有发出警告,请启用更多警告。并将警告视为错误。好消息是,修复起来很简单:不要在数组上使用运算符的地址。使用纯
array
将导致数组衰退指向指向第一个元素(正确类型)的指针。您可以向函数中添加一个参数来表示元素的数量。还请注意,在
main
函数中,使用
&array
可以获得
int(*)类型的内容[13]
。与您希望函数接收的
int*
不完全相同。如果编译器没有发出警告,请启用更多警告。并将警告视为错误。好消息是,修复起来很简单:不要在数组上使用运算符的地址。使用纯
array
将导致数组衰退指向第一个元素(正确类型)的指针。为什么
#定义ARRSZ(arr)arr、sizeof(arr)/sizeof(*arr)
而不是
#定义ARRSZ(arr)sizeof(arr)/sizeof(*arr)
sizeof
返回
size\u t
not
int
@MichaelWalz,因为它将整个调用参数替换为
myFunc
。至少很奇怪。@sp2danny,知道了,但它真的很奇怪。为什么
定义ARRSZ(arr)arr,sizeof(arr)/sizeof(*arr)
而不是
定义ARRSZ(arr)sizeof(arr)/sizeof(*arr)
sizeof
返回
size\u t
not
int
@MichaelWalz,因为它将整个调用参数替换为
myFunc
。至少很奇怪。@sp2danny,知道了,但真的很奇怪。