数组获取元素个数:
sizeof(ids)/sizeof(int)
需要根据字节的长度来计算个数,当然在java中直接.length来获取,c语言就是比较麻烦,毕竟java是封装语言,将繁杂的步骤分装好方便调用了.
//用随机数生成一个数组,写一个函数查找最小的值,并返回最小数的地址,在主函数中打印出来
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <math.h>
#include <time.h>
//案例:用随机数生成一个数组,写一个函数查找最小的值,并返回最小数的地址,在主函数中打印出来
int* getMinPointer(int ids[],int len){
int i = 0;
//注意:参数传递无法正常使用,在这数值为1;
printf("参数计算数组长度:%d\n",sizeof(ids)/sizeof(int));
int* p = &ids[0];
for (; i < len; i++)
{
if (*p>ids[i]){
p = &ids[i];
}
}
return p;
}
void main(){
int ids[10];
int i = 0;
//初始化随机数发生器,设置种子,种子不一样,随机数才不一样
//当前时间作为种子 有符号 int -xx - > +xx
srand((unsigned)time(NULL));
for ( i = 0; i < sizeof(ids)/sizeof(int); i++)
{
ids[i] = rand() % 100;
printf("数组:%d\n", ids[i]);
}
printf("数组长度:%d\n", sizeof(ids) / sizeof(int));
int* p = getMinPointer(ids, sizeof(ids) / sizeof(int));
printf("获取最小地址:%#x,获取最小:%d\n", p, *p);
getchar();
}
注意:数组传递参数出错原因,(有时候java和c语言一不小心就穿越了,感谢csdn 郭某爱吃小鱼鱼发现博客写错的bug)
在c中,数组在作为参数的时候就退化为指针,对一个地址来取大小呢,如果是32位系统的话即为4,如果是64位系统的话为8,所以呢,在函数中sizeof获取的是指针的长度而不是数组的长度
编译结果:
//初始化随机数发生器,设置种子,种子不一样,随机数才不一样
srand((unsigned)time(NULL)); //没有这句,则编译的结果就和上面的一样,数组一直没更新
vs2013提示键:tab
无法做到百分百全对,但是知错能改.嘿嘿