您的位置:首页 > 编程语言 > C语言/C++

c语言中的数组sizeof和strlen

2017-04-05 12:38 218 查看

sizeof   strlen

sizeof():  返回一个对象或者类型所占的内存字节数。
strlen():  用来计算字符串的长度,遇到"\0"结束。

我们分别从一维数组,字符数组,二维数组的例子来分析。

注:数组名代表整个数组的时候只有两种情况
  sizeof(数组名):数组名单独在sizeof中时表示整个数组。
  &数组名:这里的数组名表示整个数组。

1.一维数组。

#include <stdio.h>
int main()
{
int a[]={0,1,2,3};
printf("%d\n",sizeof(a));// 16 整个数组的大小
printf("%d\n",sizeof(a+0));// 4 首元素地址
printf("%d\n",sizeof(*a)); // 4  首元素
printf("%d\n",sizeof(a+1));// 4  第二个元素的地址
printf("%d\n",sizeof(a[1]));//4   第二个元素
printf("%d\n",sizeof(&a)); // 4   数组的地址
printf("%d\n",sizeof(*&a));// 16  数组的地址解引用,表示整个数组
printf("%d\n",sizeof(&a+1));// 4   跳过整个数组,指向数组后面的一个地址
printf("%d\n",sizeof(&a[0]));//4   首元素地址
printf("%d\n",sizeof(&a[0]+1));//4 第二个元素的地址
return 0;
}



2.字符数组。
#include <stdio.h>
int main()
{
char* p="abcdef";
printf("%d\n",sizeof(p));//4 元素a的地址
printf("%d\n",sizeof(p+1));//4 元素b的地址
printf("%d\n",sizeof(*p));//1 解引用为指向一个字符的大小
printf("%d\n",sizeof(p[0]));//1 首元素
printf("%d\n",sizeof(&p));//4  p的地址
printf("%d\n",sizeof(&p+1));//4 p之后的地址
printf("%d\n",sizeof(&p[0]+1));//4 指向b的地址
printf("%d\n",strlen(p));//6 从a开始字符串的长度
printf("%d\n",strlen(p+1));//5 从b开始字符串的长度
//printf("%d\n",strlen(*p));// error
//printf("%d\n",strlen(p[0]));//error
printf("%d\n",strlen(&p));   //随机值
printf("%d\n",strlen(&p+1)); //随机值
printf("%d\n",strlen(&p[0]+1));	//5 从b开始找
return 0;
}



#include <stdio.h>
int main()
{
char  arr[]={'a','b','c','d','e','f'};
printf("%d\n",sizeof(arr));//6 整个数组大小
printf("%d\n",sizeof(arr+0));//4 首元素的地址
printf("%d\n",sizeof(*arr));//1 首元素大小
printf("%d\n",sizeof(arr[1]));//1 第二个元素
printf("%d\n",sizeof(&arr));//4  数组的地址
printf("%d\n",sizeof(&arr+1));//4 整个数组之后的地址
printf("%d\n",sizeof(&arr[0]+1));//4 第二个元素的地址
printf("%d\n",strlen(arr));//随机值
printf("%d\n",strlen(arr+0));//随机值
//printf("%d\n",strlen(*arr));// error
//printf("%d\n",strlen(arr[1]));//error
printf("%d\n",strlen(&arr));   //随机值
printf("%d\n",strlen(&arr+1)); //随机值
printf("%d\n",strlen(&arr[0]+1));	//随机值
return 0;
}



#include <stdio.h>
int main()
{
char  arr[]="abcdef";
printf("%d\n",sizeof(arr));//7 整个数组大小
printf("%d\n",sizeof(arr+0));//4 首元素的地址
printf("%d\n",sizeof(*arr));//1 首元素大小
printf("%d\n",sizeof(arr[1]));//1 第二个元素
printf("%d\n",sizeof(&arr));//4  数组的地址
printf("%d\n",sizeof(&arr+1));//4 整个数组之后的地址
printf("%d\n",sizeof(&arr[0]+1));//4 第二个元素的地址
printf("%d\n",strlen(arr));//6 从a开始找
printf("%d\n",strlen(arr+0));//	6
//printf("%d\n",strlen(*arr));// error
//printf("%d\n",strlen(arr[1]));//error
printf("%d\n",strlen(&arr)); // 6 从a开始找
printf("%d\n",strlen(&arr+1)); //随机值
printf("%d\n",strlen(&arr[0]+1));//5从b开始找
return 0;
}



3.二维数组。
#include <stdio.h>
int main()
{
int a[3][4]={0};
printf("%d\n",sizeof(a));//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 第二行地址
printf("%d\n",sizeof(*a));//16  第一行
printf("%d\n",sizeof(*&a));//48 整个数组
printf("%d\n",sizeof(a[3]));//16  第四行
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: