数组_数组名_数组地址

来源:互联网 发布:windows策略管理 编辑:程序博客网 时间:2024/05/27 10:44

01.&数组名–数组名表示整个数组

这里取出的是整个数组的地址。

02.sizeof(数组名)–数组名表示整个数组

计算的是整个数组的大小,单位是字节。

除此之外,遇到的所有的数组名都表示数组首元素的地址!


//一维数组int a[] = {1,2,3,4};printf("%d\n",sizeof(a));//16

这里的数组名a表示整个数组,计算整个数组的大小,也就是4个整数,整型占4个字节,所以整个数组的大小是4*4=16个字节。

printf("%d\n",sizeof(a+0));//4

这里的地址表示数组首元素的地址,也就是1的地址,a+0还是数组首元素的地址,地址就是4个字节。

printf("%d\n",sizeof(*a)); //4 *a==*(a+0)==a[0]

这里的a表示数组首元素的地址,解引用就是数组首元素,而数组首元素的字节数就是4。

printf("%d\n",sizeof(a+1));//4

这里的a是数组首元素的地址,a+1表示第二个元素的地址,地址4个字节。

printf("%d\n",sizeof(a[1]));//4

a[1]表示数组第二个元素,字节数是4。

printf("%d\n",sizeof(&a));  //4

这里的a表示整个数组,取整个数组的地址,地址还是4个字节。

printf("%d\n",sizeof(*&a)); //16

&a表示取整个数组的地址,解引用为整个数组,整个数组的大小为16个字节。

printf("%d\n",sizeof(&a+1));//4

这里的a表示整个数组,&a表示取整个数组的地址,整个数组的地址+1,还是地址,字节数为4。

printf("%d\n",sizeof(&a[0]));//4

首元素的地址,4字节。

printf("%d\n",sizeof(&a[0]+1));//4

首元素地址+1,第二个元素的地址,4字节。

眼见为实:这里写图片描述

//字符数组char arr[] = {'a','b','c','d','e','f'};printf("%d\n", strlen(arr));//随机值

这里的数组名arr表示数组首元素的地址,从首元素地址开始数,直到遇到‘’\0‘’结束,但是本数组中没有‘’\0‘’,所以就一直往后数,直到遇到‘’\0‘’为止,所以是随机值。

printf("%d\n", strlen(arr+0));//随机值

数组首元素的地址+0,还是数组首元素的地址,同上,随机值。

printf("%d\n", strlen(*arr));//error

数组首元素的地址解引用为数组首元素,而strlen( )括号里放的应该是地址,不是元素,所以代码本身错误。

printf("%d\n", strlen(arr[1]));//error

数组的第二个元素,不是地址,错误。

printf("%d\n", strlen(&arr));//随机值

取整个数组的地址,往后数,遇到‘’\0 ‘’为止,故为随机值。

printf("%d\n", strlen(&arr+1));//随机值

整个数组的地址+1,从f往后的地址开始数,也是随机值。这里的随机值应该是上一个随机值-6。

printf("%d\n", strlen(&arr[0]+1));//随机值

数组首元素的地址+1为数组第二个元素的地址,往后数,到‘’\0‘’为止,随机值,且为上上一个随机值-1。

眼见为实:

这里写图片描述
有错误的两个已屏蔽,其他都为随机值!


int a[3][4] = {0};printf("%d\n",sizeof(a));//48

计算整个数组的大小,共3*4=12个元素,每个元素4字节,共4*12=48字节。

printf("%d\n",sizeof(a[0][0]));//4

数组首元素,4个字节。

printf("%d\n",sizeof(a[0]));//16 

这里的a[0]表示第一行的数组名,所以这里表示计算第一行数组的大小,为4*4=16字节。

printf("%d\n",sizeof(a[0]+1));//4

这里的a[0]是数组名,但是没有单独放在sizeof里,所以表示数组首元素的地址,+1则是第二个元素的地址,故为4字节。

printf("%d\n",sizeof(a+1));//4

a是二维数组的数组名,这里表示二维数组的首元素地址,+
1表示二维数组的第二个元素的地址,还是4字节。

printf("%d\n",sizeof(&a[0]+1));//4

二维数组第一行的地址+1,第二行的地址,4字节。

printf("%d\n",sizeof(*a));//16

a表示二维数组首元素的地址,解引用为二维数组首元素,即第一行的元素,故4*4=16字节。

printf("%d\n",sizeof(a[3]));//16

a[3]表示第4行数组的数组名,这里的数组名表示第4行整个数组,整个数组的大小4*4=16字节。

眼见为实:

这里写图片描述

注:sizeof()括号里的值不计算,不管值属性,只看类型属性,所以尽管没有第4行,但是可以判断出a[3]是数组名,表示整个数组,便可计算出其大小。


牢记:

&数组名–数组名表示整个数组
这里取出的是整个数组的地址。

sizeof(数组名)–数组名表示整个数组
计算的是整个数组的大小,单位是字节。

除此之外,遇到的所有的数组名都表示数组首元素的地址!

原创粉丝点击