求教: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
|