memset(a,0x7F,sizeof(a)); 它将arr中的值全部赋为2139062143,这是用memset对int赋值所能达到的最大值 memset(a, 0x3f, sizeof(a)); 0x3f3f3f3f的十进制是1061109567,也就是10^9级别的 (和0x7fffffff一个数量级),而一般场合下的数据都是小于10^9的,所以它可以作为无穷大使用而不致出现数据大于无穷...
可以看到,0x3f3f3f3f已经是10^9级别的了,一般情况下很少有数据能够超过它,用来表示无穷大足够了; 而且,图论中经常需要两个int值相加,如果数相加溢出,超过INT_MAX,那就会报错;而两个0x3f3f3f3f相加是0x7e7e7e7e(2122219134),很接近INT_MAX(2147483647)了,但是不会超过int的最大范围,能够保证两个无穷大相加还...
11000000 -> 0xc0 因为int是32位符号整形,所以32/8=4有4个字节循环,可得-0x3f3f3f3f约等于0xc0c0c0c0 因为memset是逐字节赋值,可以得到代码: memset(a,0xc0,sizeof(a)); 完成~~!
满足无穷大+无穷大仍为无穷大当把无穷大设为0x3f3f3f3f时,在做初始化时也很方便,比如在初始化int型数组a时,可以使用memset(a,0x3f,sizeof(a)),因为0x3f3f3f3f的每个字节都是0x3f,如果使用0x7fffffff
memset(data, -1, sizeof(data)); // right memset(data, 1, sizeof(data)); // wrong, data[x] would be 0x0101 instead of 1 1. 2. 3. 4. 2.3 初始化结构体 struct sample_struct { char csName[16]; int iSeq; int iType;
一种常见的用法是使用memset将数组全部初始化为零。代码如下:memset(a,0,sizeof(a));另一个常见用法是将数组元素初始化为-1。代码如下:memset(a,-1,sizeof(a));更进一步,我们有时需要将数组元素初始化为一个较大的数值,如MAX值。这时,我们可以利用0x3f3f3f3f作为初始化值,它等于1061109567...
//#define INF 0x3f3f3f3f 写法3 在算法竞赛中,我们经常使用写法1,原因是,如果我们对INT_MAX进行加法运算,会导致溢出,并且运算时会转换为无符号数,再次存放到int时,会再转换为有符号数,这时会将无符号数的最高位,但是超过了有符号数的最高位的数字全部丢掉,导致结果出错,但是不会报错,导致无形bug闪亮登场。
memset(a,0,sizeof(a)); 初始化为-1 memset(a,-1,sizeof(a)); 3。 初始化为MAX define MAX 0x3f3f3f3f //当心,一共有4个3f memset(a,0x3f,sizeof(a)); 这样a数组里面的全部元素,就定义成了0x3f3f3f3f(i.e=1061109567) //补充一下,0x3f3f3f3f是一个很好用的数字,大概为1e9,算一...
int main() { char c[1000]; memset(c, CHAR, sizeof(c)); return 0; } 更多的应用 //#include <climits> INT_MAX的头文件 //#define INF 999999999 写法1 //#define INF INT_MAX 写法2 //#define INF 0x3f3f3f3f 写法3 在算法竞赛中,我们经常使用写法1,原因是,如果我们对INT_MAX进行加法运算...
memset(mp,0x3f3f3f3f,sizeof mp):0x3f3f3f3f = 1061109567 为10^9。⽽且使⽤这个数字直接⽤memset函数就⾏了,不⽤循环初始化数组,不然真的很烦。(不是Int的最⼤值,但也已经是⼀个⽐较⼤的数了,⼤多数情况下可以了)memset(mp,-1,sizeof mp):会使mp中每个元素的值为-1的原因...