admin 管理员组

文章数量: 1087139


2024年4月21日发(作者:指向函数的指针怎么用)

sizeof一维数组和二维数组

1. sizeof的说明

sizeof在C语言里面属于操作符,不属于函数,和变量的++,--属于同样的操作符。

sizeof后面的括号里面,可以放类型名,数组名等内存大小确定的类型,不能计算函数名,

可变数组的内存大小等

2. sizeof计算一维数组

首先,看如下代码:

#include

int main()

{

int a[]={1,2,3,4};

/*打印内存地址*/

printf("0x%x, 0x%x, 0x%x, 0x%xn",a,&a,a+0,&a[0]);

/*计算内存大小*/

printf("%d, %d, %d, %dn",sizeof(a),sizeof(&a),sizeof(a+0),sizeof(&a[0]));

return 0;

}

我们知道,a代表数组的起始地址,也就是数组a的0号位元素的内存起始地址,a+0

代表指针a偏移0,因此指向的还是数组的起始地址,所以a=&a=a+0=&a[0],虽然他们

的数值相等,都表示数组起始地址,但他们的意义不同。

数组名a代表数组起始地址,如果它参与指针偏移运算,那么它就代表一个指向某一

位元素的指针(看本文章最后的总结,数组名参与偏移运算,退化为指针),例如a+0代

表指向数组0号位元素的指针,因此它的内存大小为4。数组元素a[0]和*(a+0)表示的意

义相同,访问a[0],就是从数组首地址开始偏移0,然后再访问内存中的数值,所以,&a[0]

就是&(*(a+0)),&和*抵消,为a+0,代表指向数组0号位元素的指针,内存大小为4。

经过上面的分析,就可以理解代码的运行结果,已经在windows XP,vc6.0下编译链

接过:

3. sizeof计算二维数组

首先,看如下代码:


本文标签: 数组 地址 指针 起始 偏移