int array[100];
int *array;
我对
int array[100]
之间的差异感到困惑和 int *array
.基本上,当我这样做时
int array[100]
( 100
这只是 int
的一个例子),我只是在内存中为 100 个整数保留了空间,但我可以做 int * array
我没有为这个数组指定任何类型的大小,但我仍然可以做 array[9999] = 30
这仍然有意义。那么这两者有什么区别呢?
最佳答案
指针是一个指针,它指向其他地方(如数组的第一个元素)。编译器没有关于它可能指向的位置或它可能指向的数据大小的任何信息。
数组是由多个相同类型的连续元素组成的数组。编译器知道它的大小,因为它总是被指定的(尽管有时只是隐式指定了大小)。
数组可以被初始化,但不能被赋值。数组也经常衰减到指向它们的第一个元素的指针。
数组衰减示例:
int array[10];
int *pointer = array; // Here the symbol array decays to the expression &array[0]
// Now the variable pointer is pointing to the first element of array
数组不能自然地传递给函数。当你声明一个函数参数时,如
int arr[]
,编译器会将其翻译为 int *arr
.所有这些信息以及更多信息都应该出现在任何好书、教程或类(class)中。
关于 "int array[int]"和 "int *array"之间的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54345552/