博客
关于我
sizeof strlen对数组的用法
阅读量:504 次
发布时间:2019-03-06

本文共 4127 字,大约阅读时间需要 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/

你可能感兴趣的文章
mysql丢失更新问题
查看>>
MySQL两千万数据优化&迁移
查看>>
MySql中 delimiter 详解
查看>>
MYSQL中 find_in_set() 函数用法详解
查看>>
MySQL中auto_increment有什么作用?(IT枫斗者)
查看>>
MySQL中B+Tree索引原理
查看>>
mysql中cast() 和convert()的用法讲解
查看>>
mysql中datetime与timestamp类型有什么区别
查看>>
MySQL中DQL语言的执行顺序
查看>>
mysql中floor函数的作用是什么?
查看>>
MySQL中group by 与 order by 一起使用排序问题
查看>>
mysql中having的用法
查看>>
MySQL中interactive_timeout和wait_timeout的区别
查看>>
mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>