[关闭]
@zsh-o 2018-08-16T11:53:15.000000Z 字数 1110 阅读 752

算法杂记

算法 编程


数组初始化 非常大的数 memset

limits.h头文件里面有定义各种范围的最大值和最小值,也可以自己定义

但用memset初始化数组时要特别注意,memset是按照字节来处理的,也就是说赋值的范围为[0x00,0xff],当设定为0xff时:memset(A, 0xff, sizeof(A))时,A数组中所有元素为-1,所以当我们需要把数组初始化一个很大的值或者很小的值时需要:

  1. #include <iostream>
  2. #include <cstring>
  3. #include <limits>
  4. using namespace std;
  5. const int MAXSIZE = 1000;
  6. int A[MAXSIZE];
  7. int B[MAXSIZE];
  8. const int MY_INT_MAX = 0x7fffffff;
  9. const int MY_INT_MIN = 0x80000000;
  10. int main(){
  11. cout<<INT_MAX<<endl; //2147483647
  12. cout<<INT_MIN<<endl; //-2147483648
  13. cout<<MY_INT_MAX<<endl; //2147483647
  14. cout<<MY_INT_MIN<<endl; //-2147483648
  15. memset(A, 0x7f, sizeof(A));
  16. memset(B, 0x80, sizeof(B));
  17. printf("%d\n", A[0]); //2139062143
  18. printf("%d\n", B[0]); //-2139062144
  19. }

关于sizeof()

sizeof只返回类型的字符数,这里需要注意的是数组的申明,int A[L]这种声明方式相当于声明了一种整形数组类型,其可以用memset(A, 0x00, sizeof(A))进行初始化,但int* A = new int[L]中的A是个整形指针类型,这时sizeof(A)返回的是整形指针大小,故此时初始化应该用memset(A, 0x00, sizeof(int) * L)

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(){
  4. int A[100];
  5. A[0] = 4;
  6. int* p = A;
  7. printf("%d %d\n", A[0], p[0]);
  8. printf("%d %d\n", sizeof(A), sizeof(p));
  9. }
  1. 4 4
  2. 400 4
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注