
求教:sizeof 可以返回对象的字节数。
int array[5] = {0}; int bytes = sizeof array; 这里的 bytes 等于 20。那么如果定义一个函数:
void test(int array[]){ printf("%d\n",sizeof array); } 如果传入 array 的话会打印出 4,我刚才看了下书知道里计算的是 array 这个指针,指针一直为 4 字节,所以会输出 4。那么 1 中 sizeof 也是对 array 这个数组的第一个元素指针操作啊,为什么不输出 4,而输出整个数组的字节数呢?难道sizeof还变吗?它怎么知道传入的是数组还是指针呢?
1 newmind 2018-10-30 17:05:25 +08:00 via Android 标题看的我强迫症犯了 |
3 chenstack 2018-10-30 17:17:22 +08:00 1 中 array 类型是 int[5],2 中 array 类型是 int[],也就是 int*,所以结果不一样 |
4 zhicheng 2018-10-30 17:21:08 +08:00 via iPhone 参数里的全是指针。 |
5 GeruzoniAnsasu 2018-10-30 17:26:26 +08:00 本站已跟百度达成深度合作。。。 |
6 codechaser OP @newmind 我...打错了 |
7 bytelee 2018-10-30 17:51:47 +08:00 理解下数组和指针的区别 :) |
8 fcten 2018-10-30 17:53:03 +08:00 数组作为作为函数参数传递时,实际传递的是指针。sizeof 自然只能计算出指针的长度,因为这个时候根本不知道数组的长度。 |
9 chiu 2018-10-30 18:06:02 +08:00 via Android 两个 array 类型不一样,一个数组一个指针。 |
10 innoink 2018-10-30 18:09:56 +08:00 via Android int [5]和 int []又不是同一个类型,当然不一样了 |
11 HHehr0ow 2018-10-30 21:08:11 +08:00 sizeof 是一个 compile time 的运算符 |
12 msg7086 2018-10-30 21:40:53 +08:00 sizeof 是编译时运算符,编译完以后的代码是 int bytes = 20; printf("%d\n", 8); 运行程序并不会改变 8 的值,无论函数的输入是什么样的数组,8 就是 8。 |
13 LGA1150 2018-10-30 21:53:07 +08:00 via Android |
14 stevenbipt 2018-10-30 23:20:07 +08:00 via Android 定义一个指针指向数组 |
15 stevenbipt 2018-10-30 23:20:34 +08:00 via Android 然后在 sizeof 那个指针试试←_← |
16 codechaser OP @stevenbipt 想着指针的指针的指针最后会到哪儿?谁是他们最初的起源呢 |
17 codechaser OP @msg7086 sizeof 返回的值编译的时候就会替换成常量是吗? |
18 msg7086 2018-11-01 17:19:08 +08:00 |