sizeof学习
0. 前言
- 跑去面试做了下题
- 有个sizof()各种数组的题,而我之前总是数组和指针傻傻分不清
- 过去不怎么用到sizeof(),用到也是直接测试运行没啥问题就不在意了
- 但是确实是没弄清楚,所以仔细学一下
1. 参考
2. 指针和数组的不同
-
指针和数组,是两个东西,虽然很像,但是确实是两个东西
-
测试
数组本身不能被改变,数组内的元素可以被改变
指针可以指向数组,然后使用类似数组的操作
-
代码测试
64位的系统,指针是64位的
int main() { char a[] = "123456"; char *b; b = a; // a++; b++; printf("sizeof a : %d\n", sizeof(a)); printf("sizeof b : %d\n", sizeof(b)); printf(b); }sizeof a : 7 sizeof b : 8 23456 -
如果直接将数组自加一,编译器会报错
int main() { char a[] = "123456"; char *b; b = a; a++; b++; printf("sizeof a : %d\n", sizeof(a)); printf("sizeof b : %d\n", sizeof(b)); printf(b); }PS E:\selfStudy\C_study\2_code\test_sizeof> cd "e:\selfStudy\C_study\2_code\test_sizeof\" ; if ($?) { gcc test.c -o test } ; if ($?) { .\test } test.c: In function 'main': test.c:10:6: error: lvalue required as increment operand a++; ^~ -
数组加一就变成了指针了,而指针在sizeof()里面自加一,指针的值不会变
代码:
int main()
{
char a[] = "123456";
char *b;
b = a+1;
// a++;
b++;
printf("sizeof a : %d\n", sizeof(a));
printf("sizeof a+1 : %d\n", sizeof(a+1));
printf("b int: %d\n", (unsigned int)b);
printf("sizeof b : %d\n", sizeof(b++));
printf("b int: %d\n", (unsigned int)b);
// b++;
printf(b);
}
运行结果
test.c: In function 'main':
test.c:14:27: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
printf("b int: %d\n", (unsigned int)b);
^
test.c:16:27: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
printf("b int: %d\n", (unsigned int)b);
^
sizeof a : 7
sizeof a+1 : 8
b int: 6422035
sizeof b : 8
b int: 6422035
3456
117

被折叠的 条评论
为什么被折叠?



