【发布时间】:2020-01-26 17:19:01
【问题描述】:
两个注释函数返回完全相同的内存地址。那么为什么我可以从数组变量(指向第一个元素的指针)中获取正确的大小,而当似乎完全没有区别(完全相同的内存地址)时,我无法从数组指针(数组参数)中获取大小:
#include <stdio.h>
void arraySize(int arr[]) {
printf("%p\n", arr); // same memory address
printf("%lu\n", sizeof(arr) / sizeof(arr[0])); // different result
}
int main() {
int a[] = {1,2,3,4,5};
printf("%p\n", a); // same memory address
printf("%lu\n", sizeof(a) / sizeof(a[0])); // different result
arraySize(a);
return 0;
}
【问题讨论】:
-
arraySize实际上收到的是指向数组第一个元素的指针,而不是数组对象。在函数参数声明中,int arr[]被解释为int *。
标签: c arrays pointers memory-address