博客
关于我
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 和 PostgreSQL,我到底选择哪个?
查看>>
mysql 四种存储引擎
查看>>
MySQL 在并发场景下的问题及解决思路
查看>>
MySQL 在控制台插入数据时,中文乱码问题的解决
查看>>
MySQL 基础架构
查看>>
MySQL 基础模块的面试题总结
查看>>
MySQL 处理插入重主键唯一键重复值办法
查看>>
MySQL 备份 Xtrabackup
查看>>
mysql 复杂查询_mysql中复杂查询
查看>>
mYSQL 外键约束
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>