请看下面的c语言示例。
#include <stdio.h>
int main()
{
int arr[] = {1, 2 ,3};
int *ptr = arr;
printf("sizeof arr[] = %d ", sizeof(arr));
printf("sizeof ptr = %d ", sizeof(ptr));
return 0;
}
输出: sizeof arr[] = 12 sizeof ptr = 4
为什么指针 "ptr "的sizeof输出4,而数组变量 "arr"(虽然 "arr "也是一个指针)输出12?
操作符 sizeof 返回一个对象类型的大小。你的数组有3个整数,所以它是sizeof(int)*3。以字节为单位的指针大小是特定于平台的,在这种情况下,它是4字节=32位。
数组变量具有指针语义,所以当它被传递给函数或用于赋值时,如int *p = arr,它代表其第一个元素的地址,然而它的类型并不是简单的元素类型。
在你的代码段中,大小是由编译器从你使用的初始化器中推断出来的,所以在这种情况下,你的数组类型是int[3],而不是简单的int。
int的大小是4个字节,所以arr的大小= sizeof(int) * 3,即12,因为它包含3个整数。
但是ptr是一个指向整数数组的指针。在32位的情况下,所有指针的大小都是4字节(32位)。
希望能帮到你
虽然 "arr "也是一个指针。
NO,数组不是指针。
pointer的大小取决于架构。指针的大小取决于架构,不取决于它指向什么。
数组的大小是数组中所有元素的数量。在这种情况下,数组的大小是指数组中所有元素的数量。arr
的内容 3
整数元素,在你的系统中,每个元素有4个字节,(在你的系统中的大小为1个字节)。int
可 2
在其他系统中)。) 所以 arr
是 3*sizeof(int) = 3*4 = 12
.
对你的问题非常有用 如何找到'sizeof'(指向一个数组的指针)?