指针和数组的应用

首先声明两点
        1.数组名单独出现在 sizeof 内部时计算的是整个数组的大小
        2.取地址符加数组名的时候,表示整个数组的地址。
        除此之外数组名通常表示数组首元素的地址。
看下面这列代码
int a [] = { 1 , 2 , 3 , 4 };
printf ( "%d\n" , sizeof ( a ));    16
                                      a单独存放在 sizeof 内部,表示整个数组大小.
printf ( "%d\n" , sizeof ( a + 1 ));  4/8
                                        a不是单独存放于sizeof内部,所以表示a首元素的地址, a + 1 表示数组内部第二个元素的地址。由于操作系统不确定地址大小可能为4或8.
printf ( "%d\n" , sizeof ( a [ 1 ]));  4
                                        表示数组第二个元素存放的内容大小 
printf ( "%d\n" , sizeof ( *& a )); 16
                                        * 和取地址抵消了 等同于sizeof(a)
printf ( "%d\n" , sizeof ( & a [ 0 ] + 1 ));4/8
                                                & a [ 0 ]为首元素地址,所以表示的是数组内第二个元素的地址

 下面是我个人认为几个比较绕的

char arr [] = { 'a' , 'b' , 'c' , 'd' , 'e' , 'f' };
printf ( "%d\n" , sizeof ( arr ));  6
                                        同上为整个数组地址
printf ( "%d\n" , strlen ( arr )); 随机值
                                        数组内没指定‘\0’,strlen函数只有遇到\0才会停止
printf ( "%d\n" , strlen ( * arr )); 报错
                                        streln会将接受的值默认成地址,把a当成地址的话就会出问题
printf ( "%d\n" , strlen ( arr [ 1 ]));报错
printf ( "%d\n" , strlen ( & arr ));随机值
                                           数组内没指定‘\0’,strlen函数只有遇到\0才会停止

你可能感兴趣的:(c语言)