gpt4 book ai didi

c - 'sizeof' 对不完整类型 'int[]' 的无效应用 当访问指针指向的整数数组时

转载 作者:太空宇宙 更新时间:2023-11-04 00:15:45 25 4
gpt4 key购买 nike

我正在尝试学习 C 中的指针并正在编写这个小整数数组指针练习,但遇到了 sizeof 对不完整类型 int[] 的无效应用问题。请告诉我哪里出了问题以及如何解决。谢谢。

#include <stdio.h>

int intA[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int intB[];

void int_copy(const int *source, int *destionation, int nbr)
{
int i;
for(i=0;i<nbr;i++)
{
*destionation++ = *source++;
}
}

int main()
{
int *ptrA = intA;
int *ptrB = intB;

int sizeA = sizeof(intA);
int nbrA = sizeof(intA)/sizeof(int);
printf("\n\n");
printf("[Debug]The size of intA is:%d\n", sizeA);
printf("[Debug]That means the number of elements is:%d\n", nbrA);

printf("\n\nThe values of intA are:\n");
int i;
for(i=0;i<nbrA;i++)
{
printf("[%d]->%d\n", i, intA[i]);
}


int_copy(ptrA, ptrB, nbrA);
int sizeB = sizeof(intB);
int nbrB = sizeof(intB)/sizeof(int);
printf("\n\n");
printf("[Debug]The size of intB is:%d\n", sizeB);
printf("[Debug]That means the number of elements is:%d\n", nbrB);

printf("\n\nThe values of intB are:\n");
for(i=0;i<nbrB;i++)
{
printf("[%d]->%d\n", i, *ptrB++);
}

}

# cc -g -o int_copy int_copy.c
int_copy.c: In function 'main':
int_copy.c:36: error: invalid application of 'sizeof' to incomplete type 'int[]'
int_copy.c:37: error: invalid application of 'sizeof' to incomplete type 'int[]'

我观察到的奇怪的事情是,当我运行 gdb 时,我监测到复制函数 int_copy 运行了 9 次,这似乎是正确的,但是复制函数之后打印 intB 只显示该数组中的一项.

我现在还在为指点而苦苦挣扎,所以请帮助我并原谅我的无知。非常感谢。

最佳答案

intB 基本上是一个指针,其上的 sizeof 将产生与 int 上的 sizeof 相同的结果,这就是打印品只出现一次的原因。intA 是一个已知大小的数组,因此 sizeof 有效。

您需要记住 sizeof 不是运行时调用,尽管它在语法上看起来如此。它是一个内置运算符,在编译时以字节为单位返回类型的大小,在编译时 intB 是一个指针,稍后应指向新分配的数组。

关于c - 'sizeof' 对不完整类型 'int[]' 的无效应用 当访问指针指向的整数数组时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com