关于一维数组,字符数组,二维数组,字符串的计算
首先必须明白数组名代表整个数组只有两种情况:
1,sizeof(数组名),数组名代表整个数组。意思是取整个数组大小,单位是字节。
2,&数组名,取出的是整个数组地址。
3,除此之外,所有遇到数组都代表首元素地址。
下面看题:
一维数组,
int main()
{
int a[] = {1,2,3,4};
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取出数组后面下一个数组的地址,跳过16字节
printf("%d\n",sizeof(&a[0]));//4首元素地址
printf("%d\n",sizeof(&a[0]+1));//4第二个元素地址
字符数组
char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", strlen(arr));//随机值 无\0无法停下
printf("%d\n", strlen(arr+0));//随机值 无\0无法停下
//printf("%d\n", strlen(*arr));//err 访问传递a的ANSI值97地址值出现冲突
//printf("%d\n", strlen(arr[1]));//err 传递b的ANSI值98地址值出现冲突
printf("%d\n", strlen(&arr));//随机值 从a往后数无\0无法停下
printf("%d\n", strlen(&arr+1));//随机值-6 从f往后数无\0无法停下
printf("%d\n", strlen(&arr[0]+1));//随机值-1 从b往后数无\0无法停下
printf("%d\n", sizeof(arr)); //6 数组元素的大小
printf("%d\n", sizeof(arr+0));//4 首元素地址
printf("%d\n", sizeof(*arr)); //1 首元素的大小(char)
printf("%d\n", sizeof(arr[1]));//1 第二个元素的大小
printf("%d\n", sizeof(&arr));//4 整个数组的地址
printf("%d\n", sizeof(&arr+1));//4取出下一个数组的地址 f的后面
printf("%d\n", sizeof(&arr[0]+1));//4 第二个元素地址
字符串
char arr[] = "abcdef";
printf("%d\n", strlen(arr));//6 从a往后数
printf("%d\n", strlen(arr+0));//6 从a往后数
//printf("%d\n", strlen(*arr));// err
//printf("%d\n", strlen(arr[1]));// err
printf("%d\n", strlen(&arr));//6 从a往后数
printf("%d\n", strlen(&arr+1));//随机值 取出下一个数组的地址跳过6
printf("%d\n", strlen(&arr[0]+1));//5 从b开始
printf("%d\n", sizeof(arr));//7 数组大小包括\0
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 取出下一个数组的地址跳过7
printf("%d\n", sizeof(&arr[0]+1));//4 第二个元素地址
char *p = "abcdef";
printf("%d\n", strlen(p));//6 从a开始
printf("%d\n", strlen(p+1));//5 从b开始
printf("%d\n", strlen(*p));//err
printf("%d\n", strlen(p[0]));//err
printf("%d\n", strlen(&p));//随机值 从p的地址往后数
printf("%d\n", strlen(&p+1));//随机值 从p的地址下一个往后数
printf("%d\n", strlen(&p[0]+1));//5 从B开始
printf("%d\n", sizeof(p));//4(指针变量)a的地址
printf("%d\n", sizeof(p+1));//4 b的地址
printf("%d\n", sizeof(*p));//1 解引用a的地址 a的大小(char) 首元素
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的地址
二维数组
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[3]));//16仅仅计算第四行大小

return 0;
}
阅读更多
想对作者说点什么? 我来说一句

C语言第七章数组的介绍

2010年06月07日 733KB 下载

一维数组的定义和引用

2010年08月21日 687KB 下载

C语言程序设计第四章数组

2010年04月05日 512KB 下载

C语言开发教程2 WORD版

2015年06月17日 96KB 下载

C语言全书word版CHAR07

2011年11月01日 267KB 下载

没有更多推荐了,返回首页

不良信息举报

关于一维数组,字符数组,二维数组,字符串的计算

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭