一维数组,字符数组,字符串,二维数组在sizeof()和strlen()下的不同输出
来源:互联网 发布:linux snmptrap接收 编辑:程序博客网 时间:2024/05/22 08:03
(1)一维数组
int main()//sizeof()计算变量所占空间大小
{
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a));//a单独出现在sizeof内部,表示整个数组,所以结果为16
printf("%d\n", sizeof(a+0));//a不单独出现,表数组首元素地址,加0还是首元素地址4
printf("%d\n", sizeof(*a));//*a表示首元素4
printf("%d\n", sizeof(a+1));//与上面a+0相同,表示第二个元素地址,还是地址,4
printf("%d\n", sizeof(a[1]));//第一个元素,4
printf("%d\n", sizeof(&a));//&a不是单独出现,而是在sizeof内部,不表示整个数组,降为表示整个数组地址4
printf("%d\n", sizeof(&a+1));//&a是整个数组,降为整个数组地址,加1就是跳过整个数组,不过还是地址4
printf("%d\n", sizeof(&a[0]));//是地址就是4
printf("%d\n", sizeof(&a[0]+1));//地址加1还是地址4
system("pause");
return 0;
}
(2)字符数组
int main()//sizeof()计算变量所占空间大小
{
char arr[] = { 'a', 'b','c','d','e','f' };
printf("%d\n", sizeof(arr));//arr单独出现在sizeof内部,表示整个数组,所以结果为6个字符
printf("%d\n", sizeof(arr + 0));//arr不单独出现,表数组首元素地址,加0还是首元素地址4
printf("%d\n", sizeof(*arr));//*arr表示首元素a,一个字节为1
printf("%d\n", sizeof(arr[1]));//第2个元素,为1
printf("%d\n", sizeof(&arr));//&arr不是单独出现,而是在sizeof内部,不表示整个数组,降为表示整个数组地址4
printf("%d\n", sizeof(&arr + 1));//&arr是整个数组,降为整个数组地址,加1就是跳过整个数组,不过还是地址4
printf("%d\n", sizeof(&arr[0] + 1));//地址加1还是地址4
system("pause");
return 0;
}
---------------------------------------------------------
int main()//sizeof()计算变量所占空间大小
{
char arr[] = {"abcdef" };
printf("%d\n", sizeof(arr));//arr单独出现在sizeof内部,表示整个数组,所以结果为7,因为还有个\0
printf("%d\n", sizeof(arr + 0));//arr不单独出现,表数组首元素地址,加0还是首元素地址4
printf("%d\n", sizeof(*arr));//*arr表示首元素a,为1
printf("%d\n", sizeof(arr[1]));//第2个元素,为1
printf("%d\n", sizeof(&arr));//&arr不是单独出现,而是在sizeof内部,不表示整个数组,降为表示整个数组地址4
printf("%d\n", sizeof(&arr + 1));//&arr是整个数组,降为整个数组地址,加1就是跳过整个数组,不过还是地址4
printf("%d\n", sizeof(&arr[0] + 1));//地址加1还是地址4
system("pause");
return 0;
}
---------------------------------------------------------
int main()//sizeof()计算变量所占空间大小
{
char *p = "abcdef" ;
printf("%d\n", sizeof(p));//p为指针变量,指a的地址,4
printf("%d\n", sizeof(p + 1));//b的地址,4
printf("%d\n", sizeof(*p));//1个字符,1
printf("%d\n", sizeof(p[1]));//1个字符,1
printf("%d\n", sizeof(&p));//2级指针,4
printf("%d\n", sizeof(&p + 1));//跳到f之后,是个地址,4
printf("%d\n", sizeof(&p[0] + 1));//b的地址,4
system("pause");
return 0;
}
int main()//strlen(地址)从此地址开始向后,遇到\0停止;strlen(元素)就是error
{
char *p = "abcdef" ;
printf("%d\n", strlen(p));//p为指针变量,指a的地址,从a开始向后数,遇到\0停止,6
printf("%d\n", strlen(p + 1));//b的地址,从b开始向后数,5
//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));//从b开始数,5
system("pause");
return 0;
}
(3)二维数组
int main()//strlen(地址)从此地址开始向后,遇到\0停止;strlen(元素)就是error
{
int a[3][4] = { 0 };
printf("%d\n", sizeof(a));//整个数组,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));//第一行第2个元素,a[0]没单独放在sizeof中,降为首元素,4
printf("%d\n", sizeof(a+1));//4
printf("%d\n", sizeof(&a[0] + 1));//&a[0]为第一行地址,加1是第2行地址,4
printf("%d\n", sizeof(*a));//首元素地址,是第一行地址,16?
printf("%d\n", sizeof(a[3]));//越界,但承接上面行的类型属性,16
system("pause");
return 0;
}
- 一维数组,字符数组,字符串,二维数组在sizeof()和strlen()下的不同输出
- sizeof 和 strlen 在求解数组 字符数组 字符串 二维数组时候的小结
- 指针的相关运算,包括一维数组、二维数组、字符数组的sizeof、strlen运算
- 字符串,字符指针和字符数组的sizeof和strlen
- 一维数组和二维数组的运算(sizeof与strlen的区别)
- C中 字符数组和字符串以及strlen 和sizeof
- 数组的sizeof和strlen
- 一维数组、二维数组、字符数组、指针 相关的 sizeof 计算
- 一维数组、二维数组、字符数组的&、sizeof等操作
- strlen和sizeof求字符数组长度
- 关于sizeof和strlen在一维数组的一些运算
- 字符串和字符数组的区别以及sizeof和strlen的区别
- 字符数组和指针的sizeof(),strlen()以及getline()
- sizeof与一维数组和二维数组
- 从一维数组看sizeof和strlen
- strlen()&sizeof在静态数组和动态数组中的应用~
- 有关数组的运算:sizeof()和strlen()
- 关于字符数组,字符指针 strlen和sizeof总结
- 素数距离问题
- 用ASP.NET Web API技术开发HTTP接口(二)
- 编程常用缩写
- hightCharts 跳转页面接改为弹窗图形设置效果!
- java自学-数组
- 一维数组,字符数组,字符串,二维数组在sizeof()和strlen()下的不同输出
- RecyclerView添加Header和Footer
- SYN攻击的基本原理、工具及检测方法
- C语言——实例033 gotoxy()与clrscr()函数
- Http URLConnection 接口
- 过河问题
- 新闻杂志
- Java并发编程之读写锁
- <c:forEach>详解