float型数组初始化问题

小观观 2013-01-17 02:17:31
请问一个flaot data[500]的数组,如何不用循环把它全部初始化为 -1,在线等,急求,谢谢
...全文
2406 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
下辈子做滴水 2014-05-21
  • 打赏
  • 举报
回复
memset函数确实给float赋值有问题。
失散糖 2013-01-18
  • 打赏
  • 举报
回复
赵老师其实是一个很强大的AI
zhangjialincame 2013-01-17
  • 打赏
  • 举报
回复
perl -e 'print"-1 "x500'
阿麦 2013-01-17
  • 打赏
  • 举报
回复
lin5161678想法很妙,灰常妙。赞一个先!
lin5161678 2013-01-17
  • 打赏
  • 举报
回复
引用 23 楼 amoyman 的回复:
严重支持15楼 C/C++ code ? 1 float X[500] = {-1,-1,-1,-1,-1/*一共500个*/};
同样支持15楼 不过 写500次-1 就太累了 这时候 可以用宏解决的
阿麦 2013-01-17
  • 打赏
  • 举报
回复
哪位姓赵? .
阿麦 2013-01-17
  • 打赏
  • 举报
回复
严重支持15楼
float X[500] = {-1,-1,-1,-1,-1/*一共500个*/};
欧阳春晖 2013-01-17
  • 打赏
  • 举报
回复
为什么我每一次看贴,90%都能看到赵老师的“名言”?
lin5161678 2013-01-17
  • 打赏
  • 举报
回复
15楼的想法 可以这样实现
#include <stdio.h>
#define A(B) B,B,B,B,B,
#define C(B) B B B B B B B B B B
int main()
{
	float arr[]={C(C(A(-1)))};
	for(int i=0; i<500; ++i)
		printf("%g\t", arr[i]);
	return 0;
}
赵4老师 2013-01-17
  • 打赏
  • 举报
回复
不过我还是要承认15楼的方法比17楼的方法运行效率可能更高。 为什么说可能呢? 因为如果操作系统的exe加载模块用几乎和17楼一样的汇编指令加载500个1.0f的话,两者效率应该说是一样的。
张向彬 2013-01-17
  • 打赏
  • 举报
回复
引用 18 楼 zhao4zhong1 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行!
我是来看赵老师的名言的
赵4老师 2013-01-17
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行!
赵4老师 2013-01-17
  • 打赏
  • 举报
回复
#include <stdio.h>
float data[500];
int i;
void main() {
    for (i=0;i<500;i++) {data[i]=1.0f;printf("%g\n",data[i]);}
    __asm {
        push ecx
        push edi
        mov ecx,500
        mov eax,0xBF800000 //-1.0f
        lea edi,data
        rep stosd
        pop edi
        pop ecx
    }
    for (i=0;i<500;i++) printf("%g\n",data[i]);
}
//500行1
//500行-1
shen_wei 2013-01-17
  • 打赏
  • 举报
回复
自己for 循环赋值吧。。
ForestDB 2013-01-17
  • 打赏
  • 举报
回复
不差这点效率。 真差的话: float a[500] = { /* 自己填500个-1.0 */};
HayYoung 2013-01-17
  • 打赏
  • 举报
回复
晕,c版块,看错了,代码改一下就行了。
HayYoung 2013-01-17
  • 打赏
  • 举报
回复
做不到,当然你可以优化算法,比如达夫设备等。。

template <typename T>  
void memsetSimple( T* begin, int count, const T& value )  
{  
	T* end = begin + count;  
	while( begin != end ) *begin++ = value;  
}  

memsetSimple(data, 500, -1);
小观观 2013-01-17
  • 打赏
  • 举报
回复
引用 11 楼 lvjing_CSDN 的回复:
引用 9 楼 liguanpei 的回复:Quote: 引用 5 楼 lvjing_CSDN 的回复: 如果是初始化为0的话,写data[500] = {0}就好了,可是我得初始化为-1 你即便是这么写,实际上在机器代码里面可能也要访问500次内存。
嗯,没办法了。
lvjing_CSDN 2013-01-17
  • 打赏
  • 举报
回复
引用 9 楼 liguanpei 的回复:
Quote: 引用 5 楼 lvjing_CSDN 的回复: 如果是初始化为0的话,写data[500] = {0}就好了,可是我得初始化为-1
你即便是这么写,实际上在机器代码里面可能也要访问500次内存。
小观观 2013-01-17
  • 打赏
  • 举报
回复
引用 8 楼 lin5161678 的回复:
无解 只能循环一个一个赋值
好吧,谢谢,,再想想办法
加载更多回复(9)

70,005

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧