@zsh-o
2018-08-16T11:53:15.000000Z
字数 1110
阅读 1242
算法 编程
memsetlimits.h头文件里面有定义各种范围的最大值和最小值,也可以自己定义
但用memset初始化数组时要特别注意,memset是按照字节来处理的,也就是说赋值的范围为[0x00,0xff],当设定为0xff时:memset(A, 0xff, sizeof(A))时,A数组中所有元素为-1,所以当我们需要把数组初始化一个很大的值或者很小的值时需要:
memset(A, 0x7f, sizeof(A)),int型第一位为符号位,很大的值为正数,所以第一位为剩余位为memset(A, 0x80, sizeof(A)),补码表示,位最小负数为0b1000000 = 0x80memset(A, 0x00, sizeof(A))
#include <iostream>#include <cstring>#include <limits>using namespace std;const int MAXSIZE = 1000;int A[MAXSIZE];int B[MAXSIZE];const int MY_INT_MAX = 0x7fffffff;const int MY_INT_MIN = 0x80000000;int main(){cout<<INT_MAX<<endl; //2147483647cout<<INT_MIN<<endl; //-2147483648cout<<MY_INT_MAX<<endl; //2147483647cout<<MY_INT_MIN<<endl; //-2147483648memset(A, 0x7f, sizeof(A));memset(B, 0x80, sizeof(B));printf("%d\n", A[0]); //2139062143printf("%d\n", B[0]); //-2139062144}
sizeof()sizeof只返回类型的字符数,这里需要注意的是数组的申明,int A[L]这种声明方式相当于声明了一种整形数组类型,其可以用memset(A, 0x00, sizeof(A))进行初始化,但int* A = new int[L]中的A是个整形指针类型,这时sizeof(A)返回的是整形指针大小,故此时初始化应该用memset(A, 0x00, sizeof(int) * L)
#include <stdio.h>#include <string.h>int main(){int A[100];A[0] = 4;int* p = A;printf("%d %d\n", A[0], p[0]);printf("%d %d\n", sizeof(A), sizeof(p));}
4 4400 4
