在函数中查找数组长度在数组长度以下的程序中ar主要是正确的,但在temp它显示指向ar在我的电脑上是2(单位:sizeof(int)).#include <stdio.h>void temp(int ar[]) // this could also be declared as `int *ar`{
printf("%d\n", (int) sizeof(ar)/sizeof(int));}int main(void){
int ar[]={1,2,3};
printf("%d\n", (int) sizeof(ar)/sizeof(int));
temp(ar);
return 0;}我想知道如何定义函数,以便在函数中正确读取数组的长度。
3 回答
MMMHUHU
TA贡献1834条经验 获得超8个赞
arr
, sizeof(arr)
0
-1
\0
char []
sizeof(arr)/sizeof(int) - 1
临摹微笑
TA贡献1982条经验 获得超2个赞
#include <stdio.h>void temp(int *ar){ printf("%d\n", ar[-1]);}int main(void){ int ar[]= {0, 1, 2, 3}; ar[0] = sizeof(ar) / sizeof(ar[0]) - 1; printf("%d\n", ar[0]); temp(ar + 1); return 0;}
茅侃侃
TA贡献1842条经验 获得超21个赞
//Adapted from K&R, p.135 of edition 2.#define arrayLength(array) (sizeof((array))/sizeof((array)[0]))int main(void){ int ar[]={1,2,3}; printf("%d\n", arrayLength(ar)); return 0;}
temp
typedef struct{ int *values; int capacity;} intArray;void temp(intArray array){ printf("%d\n", array.capacity);}int main(void){ int ar[]= {1, 2, 3}; intArray arr; arr.values = ar; arr.capacity = arrayLength(ar); temp(arr); return 0;}
- 3 回答
- 0 关注
- 520 浏览
添加回答
举报
0/150
提交
取消