用memset对非字符型数组初始化可能会出现错误

功能:memset是对一个一个的字节进行初始化。

有可能出错的地方: 如果对int数组进行初始化为非0的整数,会出现错误,如:

memset(arr, 1, sizeof(int)*length)

每个数都被初始化为00000001 00000001 00000001 00000001。而不是1

#include<iostream>
#include<algorithm>
#include<iterator>
#include<memory.h>
using namespace std;

void updateArray(int arr[], const int& length)
{
    int index = 2;
    int value = 3;
    arr[index] = value;
//    *(arr+index) = value;
//    *(arr+index)++;
}

int main()
{
    const int length = 6;
    int arr[length];
    memset(arr, 0, sizeof(int)*length);
    updateArray(arr, length);
    copy(arr, arr+length, ostream_iterator<int>(cout, " "));
    cout<<endl;

    return 0;
}
时间: 2024-08-30 08:30:37

用memset对非字符型数组初始化可能会出现错误的相关文章

[OI - char]有关二维字符型数组的读入

有关二维字符型数组的读入 今天LYOI日常模拟赛 窝因为T3读入二维字符型数组时出了锅导致爆零qwq 步入正题 那么该如何读入二维的字符型数组呢 假设我们想读入n = 6的二维字符型数组 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; //#define DEBUG(x) cerr << #x &l

memset为int型数组初始化问题

头文件:#include <string.h>memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为:    void * memset( void * ptr, int value, size_t num );参数说明: ptr 为要操作的内存的指针. value 为要设置的值.你既可以向 value 传递 int 类型的值,也可以传递 char 类型的值,int 和 char 可以根据 ASCII 码相互转换. num 为 ptr 的前 num 个字节,size_t 就是

strlen 字符型数组和字符数组 sizeof和strlen的区别 cin.get(input,Arsize)

strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0').指实际字符串或字符数组的实际长度(不是所占空间的字节数).函数原型extern unsigned int strlen(char *s)意思是,他从指针指向的某个地址开始扫描,并读取字符,一直读到'\0'为止,不包括'\0'strlen用于字符数组或者指针 字符型数组char

关于函数模版的字符型数组的操练

#include<iostream> using namespace std; template <typename A, typename A2> void sortArray(A *array, A2 size) { A2 temp; for (A2 i = 0; i < size; i++) { for (A2 j = i+1; j < size; j++) { if (array[i] < array[j]) { temp = array[i]; arra

字符数组的初始化

字符数组的初始化与数值型数组初始化没有本质区别.但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化. (1)用字符常量逐个初始化数组.例如: char a[8]={'i','l','o','v','e','y','o','u'}: 用逐个初始化的方法与数值型数组初始化本质上是一样的,同样也可以进行完全赋初值及不完全赋初值,但是不完全赋值时没有赋值的元素被赋为空格. 当对全体元素赋初值时也可以省去长度说明.例如: char c[ ]={‘c’,‘ ’,‘p’,‘r’,‘o','g'

复习一下整型数组,字符数组,整型指针数组,字符指针数组,整型数组指针,字符数组指针

20:52:01 2019-12-31 整型数组 int a[10];字符数组 char b[10]; _______________________整型指针数组 int *p[10]; |__|__|__|__|__|__|__|__|__| 每个格子里存的是一个指针,每个指针都是int类型的,会指向一个int的值. 1 for(int i=0; i<10; i++) 2 p[i] = &a[i]; //把a中的每个元素的地址都放在了指针数组p里. 3 4 for(int j=0; j&l

编程之美-----在一个整型数组里找出只出现过一次的那两个数

一.一个数组里除了一个数字之外,其他的数字都出现了两次 用异或来解 #include <iostream> using namespace std; int main() { int T; int n,m; while(cin>>T,T){ cin>>n; while(--T){ cin>>m; n=m^n; } printf("%d\n",n); } return 0; } 扩展: 一个整型数组里除了两个数字之外,其他的数字都出现了两次

求int型数组和最大子数组 续

之前的博文里已经实现过该程序的构思.编译.运行,本次就不再重复与之相雷同的内容. 题目:与别人借组,借助求int型数组最大和子数组的问题,考虑大数溢出和int取值范围的问题 要求: 调试程序  当子数组所含元素值超过int型数组取值范围时,会出现什么情况? 实现: 在接触到这个问题之前,肯定的说,我从来没有考虑过这个问题,不是自己不知道int型数值的取值范围,而是自己根本没有注意过这个问题,也没有想过数的取值会超过这个范围.知道这个“问题”后我做了下面的事情: a.和同学借组,查阅相关资料,了解

c语言字符数组的初始化问题

1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花括号中提供的字符个数大于数组长度,则按语法错误处理: 若小于数组 长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.字符数组与字符串 在c 语言中,将字符串作为字符数组来处理.(c++中