博客
关于我
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一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>
MySQL与Informix数据库中的同义表创建:深入解析与比较
查看>>
mysql与mem_细说 MySQL 之 MEM_ROOT
查看>>
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
查看>>
mysql丢失更新问题
查看>>
MySQL两千万数据优化&迁移
查看>>
MySql中 delimiter 详解
查看>>
MYSQL中 find_in_set() 函数用法详解
查看>>
MySQL中auto_increment有什么作用?(IT枫斗者)
查看>>
MySQL中B+Tree索引原理
查看>>
mysql中cast() 和convert()的用法讲解
查看>>
mysql中datetime与timestamp类型有什么区别
查看>>