黑马程序员技术交流社区
标题:
sizeof 获取数组长度问题
[打印本页]
作者:
wehuazi
时间:
2014-10-16 20:40
标题:
sizeof 获取数组长度问题
// 设计一个函数,找出整型数组元素的最小值
#include <stdio.h>
//声明函数min()
int min();
int main()
{
//1.定义一个数组,并赋初值
int a[] = {3,2,1,4,5,-1,0};
//2.调用min函数,并输出结果
printf("%d\n",min(a));
}
int min(int array[])
{
//定义最小值m为数组的第一个
int m = array[0];
//以数组长度遍历数组
for(int i=1; i<=<span style="line-height: 2.2em;">sizeof(</span><span style="line-height: 2.2em;">array</span><span style="line-height: 2.2em;">)/sizeof(int)</span><span style="line-height: 2.2em;">; i++)</span>
复制代码
为什么
sizeof(
array
)/sizeof(int)
处飘黄,改为
sizeof((int)
array
)/sizeof(int)
后不飘黄,但是值又不是需要的了.在main函数中值正常,而且不会飘黄.求大神的解决.
作者:
明天过后1
时间:
2014-10-16 21:25
你确定结果正常??把所有代码都发出来看看
作者:
wehuazi
时间:
2014-10-16 21:29
明天过后1 发表于 2014-10-16 21:25
你确定结果正常??把所有代码都发出来看看
#include <stdio.h>
//声明函数min()
int min();
int main()
{
//1.定义一个数组,并赋初值
int a[] = {3,2,1,4,5,-1,0};
int l = sizeof(a)/sizeof(int);
//2.调用min函数,并输出结果
printf("%d\n",min(a,l));
}
int min(int array[],int l)
{
//定义最小值m为数组的第一个
int m = array[0];
//以数组长度遍历数组
for(int i=1; i<=l; i++)
//如果有比m小的,将较小值赋值给m
if(m>array[i])
m = array[i];
//返回最小值
return m;
}
复制代码
作者:
wehuazi
时间:
2014-10-16 21:31
wehuazi 发表于 2014-10-16 21:29
结果正常,基础测试满分,就是写的时候飘黄,才改成现在这样的.
作者:
明天过后1
时间:
2014-10-16 21:40
1. 数组作为函数的参数来接收传进来的数组的时候,为了效率问题,形参的数组当指针用,该形参数组指向源数组的首地址
2. 如果你在函数中这样写 sizeof(array) 相当于求指针 array变量 的内存大小哦,
3. 由于main函数中的数组已经分配好内存空间(在main函数的栈内存中分配), a就代表这这个数组空间的首地址
4. sizeof 求变量的内存空间,首先会得到该变量的首地址,然后根据变量的类型(变量类型是告诉如何寻址)来计算所占有内存空间大小(寻址好像你跨一步要走多远的距离,差不多这意思吧)
作者:
明天过后1
时间:
2014-10-16 21:42
把之前有问题的代码一块发出来才有对比性啊。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2