目录
注意:数组名除了在sizeof()和&()表示数组地址,其他都表示首元素地址。
地址所占字节4(32位)/8(64位)。
一、字符串数组
char arr[ ]={"abcdef"}; | |||
sizeof | 解析 | strlen | |
arr | 7 | 包括\0 | 6 |
arr+0 | 4/8 | 首元素地址+0仍表示首地址 | 6 |
*arr | 1 | *对首地址解引用表示首元素 | error(对arr数组名解引用操作会得到字符‘a’->ASCII码97(地址)后面不会再遇到'\0',而strlen遇到'\0'才会停止,所以这种写法就是错误的。) |
arr[1] | 1 | 第一个元素 | error(同上) |
&arr | 4/8 | 数组地址 | 6 |
&arr+1 | 4/8 | +1跳过整个数组后的地址 | 随机 |
$arr[0]+1 | 4/8 | 第二个元素的地址 | 5 |
解析:
sizeof(arr)--——--表示计算数组整体的大小。(字符串末尾还有一个‘\0’所以答案为6+1=7)
sizeof(arr+0)--——--表示计算首元素地址大小。(只要是地址,不是4就是8,取决32位/64位)
sizeof(*arr)--——--表示计算首元素字节大小。(字符‘a’,char类型,所以字节大小是1)
sizeof(arr[1])--——--表示计算第二个元素字节大小(字符‘b’,所以字节大小是1)
sizeof(&arr)--——--表示计算arr数组地址的大小(&数组名 表示取出整个数组的地址)(地址)
sizeof(&arr+1)--——--表示计算跳过整个数组后的地址大小(但也是地址)
sizeof(&arr[0]+1)--——--表示计算第二个元素的地址大小(但也是地址)
strlen(arr)--——--计算数组整体长度,arr代表了数组首元素地址(计算结果是6)
strlen(arr+0)--——--和strlen(arr)一样(计算结果是6)
strlen(&arr[0]+1)--——--表示跳过第一个元素开始计算长度(计算结果是5)
strlen (*arr) --——--对arr数组名解引用操作会得到字符‘a’->ASCII码97(地址)后面不会再遇到'\0',而strlen遇到'\0'才会停止,所以这种写法就是错误的。
strlen (arr[1]) --——--同理可得,strlen(arr[1])也是错误的。
strlen (&arr) --——--&arr表示整个数组的地址," const char *" 类型 的 实参 与 " char *" 类型 的 形参不兼容, 函数 形参 为 char *的 类型 直接写入字符串报错。
二、字符数组
char arr[ ]={'a','b','c','d','e','f'}; | |||
sizeof | 解析 | strlen | |
arr | 6 | 数组大小 | 随机值 |
arr+0 | 4/8 | 首元素地址+0仍表示首地址 | 随机值 |
*arr | 1 | *对首地址解引用表示首元素 | error |
arr[1] | 1 | 第一个元素 | error |
&arr | 4/8 | 数组地址 | 随机 |
&arr+1 | 4/8 | +1跳过整个数组后的地址 | 随机 |
$arr[0]+1 | 4/8 | 第二个元素的地址 | 随机 |
三、int型数组
int a[ ]={1,2,3,4} | ||
sizeof | 解析 | |
a | 16 | 数组总大小 |
a+0 | 4/8 | a表示首元素地址+0仍然是 |
*a | 4 | a是首元素地址*解引用表示首元素 |
a+1 | 4/8 | a是首地址+1表示第二个元素的地址 |
a[1] | 4 | 第二个元素 |
&a | 4/8 | 数组地址 |
*&a | 16 | 数组地址解引用表示整个数组 |
&a+1 | 4/8 | 数组地址+1跳过整个数组仍是地址 |
&a[0] | 4/8 | 第一个元素地址 |
&a[0]+1 | 4/8 | 第二个元素地址 |
四、字符指针
char*p="abcdef" | |||
sizeof | 解析 | strlen | |
p | 4/8 | 计算指针变量P的大小 | 6 |
p+1 | 4/8 | 字符b的地址 | 5 |
*p | 1 | 就是一个字符‘a' | error |
p[0] | 1 | ==*(p+0)=='a' | error |
&p | 4/8 | 地址 | 随机 |
&p+1 | 4/8 | 地址 | 随机 |
&p[0]+1 | 4/8 | 第二个元素地址 | 5 |
五、二维数组
int a[3][4]={0}; | ||
sizeof | 解析 | |
a | 48 | 3*4*4整个数组 |
a[0] | 16 | 第一行 |
a[0][0] | 4 | 第一个元素 |
a[0]+1 | 4/8 | 第一行第二个元素地址 |
*(a[0]+1) | 4 | 第一行第二个元素 |
a+1 | 4 | 第二行地址,二维数组首元素地址是第一行(把二维看成一维) |
*(a+1) | 16 | a[1] |
&a[0]+1 | 4 | 第二行地址 |
*(&a[0]+1) | 16 | |
*a | 16 | 第一行 |
a[3] | 16 |
标签:arr,--,元素,C语言,地址,数组,sizeof,strlen From: https://blog.csdn.net/Jasmine5606/article/details/141468804