sizeof 和 strlen 的深入理解
2017-04-05 01:30
169 查看
话不多说,全在图里。
一、一维整形数组sizeof
#include<stdio.h> #include<Windows.h> int main() { int a[]={1,2,3,4}; printf("%d\n",sizeof(a)); //16 数组名单独存放在sizeof内部,输出的是数组长度,int型四个元素那么就是16个字节。 printf("%d\n",sizeof(a+0)); //4 此时的a是首元素地址,+i表示向后偏移指针指向元素类型的大小*i个字节 printf("%d\n",sizeof(*a)); //4 解引用首元素地址就是首元素,int类型的首元素地址为4个字节 printf("%d\n",sizeof(a+1)); //4 首元素地址+1*4即表示第二个元素,int型即为4 printf("%d\n",sizeof(a[1])); //4 表示第二个元素的大小 printf("%d\n",sizeof(&a)); //4 a为首元素的地址,&a就表示数组的地址 printf("%d\n",sizeof(*&a)); //16 &a表示数组的地址,再解引用就是整个数组 printf("%d\n",sizeof(&a+1)); //4 数组的地址+1表示跳出这个数组,出来之后还是一个地址,一个地址四个字节 printf("%d\n",sizeof(&a[0])); //4 第一个元素的地址类型大小 printf("%d\n",sizeof(&a[0]+1)); //4 第二个元素的地址类型大小 system("pause"); return 0; }
验证无误:
二、一维字符数组sizeof
#include<stdio.h> #include<Windows.h> int main() { char arr[]={'a','b','c','d','e','f'}; printf("%d\n", sizeof(arr)); //6 整个数组的大小,arr中包含6个char类型元素 printf("%d\n", sizeof(arr +0)); //4 表示首元素的地址 一个地址是4个字节 printf("%d\n", sizeof(*arr)); //1 arr为首元素地址 *arr就表示第一个元素即a字符的大小 printf("%d\n", sizeof(arr[1])); //1 指的是第二个该数组中第二个字符的大小 printf("%d\n", sizeof(&arr)); //4 表示数组的地址,一个地址大小为4个字节 printf("%d\n", sizeof(&arr+1)); //4 跳出该数组后的地址,一个地址大小为4个字节 printf("%d\n", sizeof(&arr[0]+1)); //4 表示该数组中第一个字符后的字符的地址大小,也就是字符b的地址大小 return 0; }
验证无误:
三、一维字符数组strlen
#include<stdio.h> #include<Windows.h> int main() { char arr[]={'a','b','c','d','e','f'}; printf("%d\n", strlen(arr)); //随机值 strlen判断字符串长度直到遇到\0才停止计数 printf("%d\n", strlen(arr+0)); //随机值 和上个值相同 //printf("%d\n", strlen(*arr)); //报错 *arr解引用找到首元素‘a’, a的ASCLL码值为97,即strlen(97) //我们将错误的地址给了strlen,所以编译器报错就不在运行 //printf("%d\n", strlen(arr[1])); //错误 //arr[1]代表的是字符b,对应的ASCLL码值为98,同理 printf("%d\n", strlen(&arr)); //随机值 printf("%d\n", strlen(&arr+1)); //随机值 printf("%d\n", strlen(&arr[0]+1)); //随机值 system("pause"); return 0; }
验证:随机值 不同用户操作会产生不一样的值
四、二维整形数组sizeof
// 二维数组 #include<stdio.h> #include<Windows.h> int main() { int a[3][4] = {0}; printf("%d\n",sizeof(a)); //48 整个数组的大小,3*4*4=48 printf("%d\n",sizeof(a[0][0])); //4 数组第一个元素类型的大小 printf("%d\n",sizeof(a[0])); //16 表示第一行素组内容的大小 printf("%d\n",sizeof(a[0]+1)); //4 第一行第二个元素的大小 printf("%d\n",sizeof(a+1)); //4 第一行的地址加一,表示第二行的地址 printf("%d\n",sizeof(&a[0]+1)); //4 &a[0]取出的是第一行的地址,加一指向第二行第一个元素 printf("%d\n",sizeof(*a)); //16 第一行的大小 printf("%d\n",sizeof(&a[3])); //4 表示第三行数组的地址 system("pause"); return 0; }
验证无误:
That's all,thanks!
相关文章推荐
- 深入理解sizeof和strlen
- 深入理解sizeof和strlen
- C++ 深入理解sizeof(),strlen()和内存补齐
- 深入理解sizeof与strlen
- strlen和sizeof函数区别(深入理解)
- 深入理解sizeof与strlen的区别
- 深入理解sizeof和strlen
- strlen和sizeof函数区别(深入理解)
- 转:深入理解sizeof与strlen
- 对于sizeof()和strlen()的深入理解
- 深入理解sizeof 和 strlen
- 深入理解sizeof
- 深入理解sizeof
- sizeof()深入理解
- 深入理解sizeof
- 深入理解sizeof
- 深入理解sizeof
- 深入理解sizeof
- [转贴]深入理解sizeof
- 深入理解sizeof