博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sizeof strlen对数组的用法
阅读量:502 次
发布时间:2019-03-06

本文共 4143 字,大约阅读时间需要 13 分钟。

int main(){
//一维数组int a[] = {
1,2,3,4};printf("%d\n",sizeof(a));//16printf("%d\n",sizeof(a+0));//4 &a[0]printf("%d\n",sizeof(*a));//4 a[0]printf("%d\n",sizeof(a+1));//*a->1 4printf("%d\n",sizeof(a[1]));//*(a+1) 4printf("%d\n",sizeof(&a));//4printf("%d\n",sizeof(*&a));//相当于 a 16 printf("%d\n",sizeof(&a+1));// 4printf("%d\n",sizeof(&a[0]));//4printf("%d\n",sizeof(&a[0]+1));//4 &a[1]//字符数组char arr[] = {
'a','b','c','d','e','f'};printf("%d\n", sizeof(arr));//6printf("%d\n", sizeof(arr+0));//4 &arr[0] printf("%d\n", sizeof(*arr));//1printf("%d\n", sizeof(arr[1])); //1 printf("%d\n", sizeof(&arr));//4printf("%d\n", sizeof(&arr+1));//4printf("%d\n", sizeof(&arr[0]+1));//4 &arr[1]printf("%d\n", strlen(arr));//随机数a1 printf("%d\n", strlen(arr+0));//随机数a1 printf("%d\n", strlen(*arr));//崩溃 printf("%d\n", strlen(arr[1]));//崩溃 printf("%d\n", strlen(&arr));//随机数a1 printf("%d\n", strlen(&arr+1));//随机数a1-6printf("%d\n", strlen(&arr[0]+1));//随机数a1-1char arr[] = "abcdef";printf("%d\n", sizeof(arr));//7printf("%d\n", sizeof(arr+0));//4 &arr[0] printf("%d\n", sizeof(*arr));//1 'a'printf("%d\n", sizeof(arr[1]));//1 'b'printf("%d\n", sizeof(&arr));//4 printf("%d\n", sizeof(&arr+1));//4 数组最后的地址 printf("%d\n", sizeof(&arr[0]+1));//4 &arr[1]printf("%d\n", strlen(arr));//6printf("%d\n", strlen(arr+0));//6 &arr[0]printf("%d\n", strlen(*arr));//崩溃'a'printf("%d\n", strlen(arr[1]));//崩溃'b' printf("%d\n", strlen(&arr));//6 类型不匹配 有警告 printf("%d\n", strlen(&arr+1));//随机数 类型不匹配 有警告 printf("%d\n", strlen(&arr[0]+1));//5char arr1[] = "abcde";printf("%d\n", sizeof(arr1));//6printf("%d\n", strlen(arr1));//5char arr2[] = "abcde\0";printf("%d\n", sizeof(arr2));//7printf("%d\n", strlen(arr2));//5char arr3[] = "abcde\0abcdef";printf("%d\n", sizeof(arr3));//13printf("%d\n", strlen(arr3));//5char arr4[] = "abcde\n\0abcdef";printf("%d\n", sizeof(arr4));//14printf("%d\n", strlen(arr4));//6char *p = "abcdef";printf("%d\n", sizeof(p));//4printf("%d\n", sizeof(p+1));//4 'b'的地址 printf("%d\n", sizeof(*p));//1printf("%d\n", sizeof(p[0]));//1 *(p+0) printf("%d\n", sizeof(&p));//4printf("%d\n", sizeof(&p+1));//4printf("%d\n", sizeof(&p[0]+1));//4 'b'printf("%d\n", strlen(p));//6printf("%d\n", strlen(p+1));//5printf("%d\n", strlen(*p));//崩溃printf("%d\n", strlen(p[0]));//崩溃printf("%d\n", strlen(&p));//随机值 printf("%d\n", strlen(&p+1));//随机值 printf("%d\n", strlen(&p[0]+1));//5//二维数组int a[3][4] = {
0};printf("%d\n",sizeof(a));//48整个数组的大小 printf("%d\n",sizeof(a[0][0]));//4printf("%d\n",sizeof(a[0]));//16 相当于第一行的数组名 printf("%d\n",sizeof(a[0]+1));//4 a[0][1]的地址printf("%d\n",sizeof(*(a[0]+1)));//4 a[0][1]printf("%d\n",sizeof(a+1));//4 第2行的地址 相当与 &a[1], 另一方面:a[1]第二行的数组名 相当与*(a+1) printf("%d\n",sizeof(*(a+1)));//16printf("%d\n",sizeof(&a[0]+1));//4printf("%d\n",sizeof(*(&a[0]+1)));//16printf("%d\n",sizeof(*a));//16 a代表数组首元素的地址,此时以为a是二维数组他的首元素是个一维数组 printf("%d\n",sizeof(a[3]));//16 sizeof中的表达式不参与运算,只在编译期间确定里面的类型几个字节 }

笔试题

1.

int main(){
int a[5] = {
1, 2, 3, 4, 5 }; int *ptr = (int *)(&a + 1); printf( "%d,%d", *(a + 1), *(ptr - 1)); //2,5 return 0;}

2.

//由于还没学习结构体,这里告知结构体的大小是20个字节struct Test{
int Num; char *pcName; short sDate; char cha[2]; short sBa[4];}*p;//假设p 的值为0x100000。如下表表达式的值分别为多少?int main(){
p=0x100000; printf("%p\n", p + 0x1);//0x00100014 p加上p类型的字节数 printf("%p\n", (unsigned long)p + 0x1); //0x00100001此时p是一个值,加上1 printf("%p\n", (unsigned int*)p + 0x1);// 0x00100004 return 0;}

3.

int main(){
int a[4] = {
1, 2, 3, 4 }; int *ptr1 = (int *)(&a + 1); int *ptr2 = (int *)((int)a + 1); printf( "%x,%x", ptr1[-1], *ptr2);//4,2000000 return 0;}

解析

在这里插入图片描述

4.

#include 
int main(){
int a[3][2] = {
(0, 1), (2, 3), (4, 5) }; //a={1,3,5,0,0,0} int *p; p = a[0]; printf( "%d", p[0]); return 0;}

5.

结果 fffc,-4

在这里插入图片描述

在这里插入图片描述

6

int main(){
int aa[2][5] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int *ptr1 = (int *)(&aa + 1); int *ptr2 = (int *)(*(aa + 1)); printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1)); //10,5 return 0;}

7.

int main({
char *a[] = {
"work" , "at" , "alibaba"};char**pa = a;pa++;printf("%s\n",*pa);//atreturn 0;}

8.

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

转载地址:http://uwtdz.baihongyu.com/

你可能感兴趣的文章