博客
关于我
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/

你可能感兴趣的文章
nginx:/usr/src/fastdfs-nginx-module/src/common.c:21:25:致命错误:fdfs_define.h:没有那个文件或目录 #include
查看>>
Nginx:NginxConfig可视化配置工具安装
查看>>
ngModelController
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>