- C语言数组笔试题解析
- 一维数组
- 字符数组
- 二维数组
数组名:
- sizeof(数组名):数组名表示整个数组,计算的是整个数组的大小
- &数组名:数组名表示的是整个数组,取出的是整个数组的地址
一维数组
int main() { int a[] = { 1,2,3,4 }; printf("%dn", sizeof(a));//16 数组名a单独放在sizeof内部,数组名表示的是整个数组,计算的是整个数组的大小 printf("%dn", sizeof(a + 0));//4/8 a表示首元素的地址,a+0还是首元素的地址 printf("%dn", sizeof(*a));//4 a表示首元素的地址,*a就是首元素==》 a[0] //*a <==> *(a+0) <==> a[0] printf("%dn", sizeof(a + 1));//4/8 a表示首元素的地址,a+1是第二个元素的地址 printf("%dn", sizeof(a[1]));//4 就是第二个元素 printf("%dn", sizeof(&a));//4/8 &a - 数组的地址 printf("%dn", sizeof(*&a));//16 &a是数组的地址,对数组的地址解引用拿到的是数组 printf("%dn", sizeof(&a + 1));//4/8 &a是数组的地址,&a+1是数组地址+1,跳过整个数组,还是地址 printf("%dn", sizeof(&a[0]));//4/8 printf("%dn", sizeof(&a[0] + 1));//4/8 return 0; }字符数组
int main() { char arr[] = { 'a','b','c','d','e','f' }; printf("%dn", sizeof(arr));//6 printf("%dn", sizeof(arr + 0));//4/8 printf("%dn", sizeof(*arr));//1 printf("%dn", sizeof(arr[1]));//1 printf("%dn", sizeof(&arr));//4/8 printf("%dn", sizeof(&arr + 1));//4/8 printf("%dn", sizeof(&arr[0] + 1));//4/8 return 0; }
strlen - 库函数
求字符串长度
sizeof - *** 作符 - 单位是字节
求变量所占空间的大小
求类型创建的变量所占空间的大小
int main() { char arr[] = { 'a','b','c','d','e','f' }; printf("%dn", strlen(arr));//随机值 printf("%dn", strlen(arr + 0));//随机值 printf("%dn", strlen(*arr));//*arr - 'a' - 97 //strlen以为传进来的'a'的ascii码值就是地址 printf("%dn", strlen(arr[1]));//'b' - 98 -err printf("%dn", strlen(&arr));//随机值 printf("%dn", strlen(&arr + 1));//随机值 printf("%dn", strlen(&arr[0] + 1));//随机值 return 0; }
int main() { char arr[] = "abcdef";//{a b c d e f }//7 printf("%dn", sizeof(arr));//7字节 printf("%dn", sizeof(arr + 0));//4/8 首元素地址 printf("%dn", sizeof(*arr));//1 arr是首元素地址,*arr就是首元素 printf("%dn", sizeof(arr[1]));//1 第二个元素 printf("%dn", sizeof(&arr));//4/8 数组的地址,数组的地址也是地址 printf("%dn", sizeof(&arr + 1));//4/8 &a是数组的地址,&a+1是数组地址+1,跳过整个数组,还是地址 printf("%dn", sizeof(&arr[0] + 1));//4/8 第二个元素的地址 return 0; }
int main() { char arr[] = "abcdef";//{a b c d e f }//7 printf("%dn", strlen(arr));//6 printf("%dn", strlen(arr + 0));//6 printf("%dn", strlen(*arr));//err printf("%dn", strlen(arr[1]));//err printf("%dn", strlen(&arr));//6 printf("%dn", strlen(&arr + 1));//随机值 printf("%dn", strlen(&arr[0] + 1));//5 return 0; }
int main() { const char* p = "abcdef"; printf("%dn", sizeof(p));//4/8 p是一个指针变量 printf("%dn", sizeof(p + 1));//4/8 p+1是字符b的地址 printf("%dn", sizeof(*p));//1 printf("%dn", sizeof(p[0]));//1 p[0]-->*(p+0) printf("%dn", sizeof(&p));//4/8 printf("%dn", sizeof(&p + 1));//4/8 printf("%dn", sizeof(&p[0] + 1));//4/8 return 0; }
int main() { const char* p = "abcdef"; printf("%dn", strlen(p));//6 printf("%dn", strlen(p + 1));//5 printf("%dn", strlen(*p));//err printf("%dn", strlen(p[0]));//err p[0]-->*(p+0) printf("%dn", strlen(&p));//随机值 printf("%dn", strlen(&p + 1));//随机值 printf("%dn", strlen(&p[0] + 1));//5 return 0; }二维数组
int main() { int a[3][4] = { 0 }; printf("%dn", sizeof(a));//48 printf("%dn", sizeof(a[0][0]));//4 printf("%dn", sizeof(a[0]));//16 a[0]是第一行的数组名,数组名单独放在sizeof内部 printf("%dn", sizeof(a[0] + 1));//4/8 //a[0]是第一行的数组的数组名,并没有单独放在sizeof内部,也没有&,所以a[0]表示首元素的地址,就是这一行这个数组第一个元素的地址 //所以a[0] + 1就是这一行,第二个元素的地址 printf("%dn", sizeof(*(a[0] + 1)));//4 *(a[0] + 1)就是第一行第二个元素 printf("%dn", sizeof(a + 1));//4/8 数组名a并没有单独放在sizeof内部,也没有&,所以a表示首元素(第一行)的地址 //所以a+1,就是第二行的地址 printf("%dn", sizeof(*(a + 1)));//16 *(a+1)就是第二行 printf("%dn", sizeof(&a[0] + 1));//4/8 第二行地址 printf("%dn", sizeof(*(&a[0] + 1)));//16 第二行 - a[1] printf("%dn", sizeof(*a));//16 //a表示首元素(第一行)的地址 //*a - 第一行 - 第一行的数组名 //*a -> *(a+0) -> a[0] printf("%dn", sizeof(a[3]));//16 return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)