我做了一个静态的int arr3并设置为1,2,3。
我可以在同一函数中打印1,2,3。
但是当我传递数组时,它只打印1,2。
为什么?发生了什么?我该如何解决这个问题?
#include <stdio.h>
void printArray(int* arr){
size_t n = sizeof(arr)/sizeof(arr[0]);
for(int i=0; i<n; i++){
printf("%d\n",arr[i]);
}
}
int* makearray()
{
static int arr[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
printf("The Array before passing onto stack\n");
size_t n = sizeof(arr)/sizeof(arr[0]);
for(int i=0; i<n; i++){ printf("%d\n",arr[i]);}
printf("\nThe Array when attempting to pass to another function\n");
printArray(arr);
return arr;
}
int main(void) {
int* m = makearray();
return 0;
}
发布于 2021-11-06 15:35:55
通过将数组转换为指针,您删除了sizeof
需要知道其总长度的信息。
相反,它只提供单个int *
的大小,是您机器上单个int
大小的两倍。
因此,您只能看到前两个元素。
在C语言中,你基本上被强制沿着指针传递长度。您可以将这两种语言封装在一个结构中,以使其更易于使用,但不要期望您可能习惯的其他语言的精妙之处。
https://stackoverflow.com/questions/69868719
复制