为什么memset不能将数组元素初始化为1?

原型:extern void *memset(void *buffer, int c, int count);

功能:把buffer所指内存区域的前count个字节设置成字符c。

包含头文件:<string.h>

注意这个函数是字符串函数,所以一定要包含字符串头文件。

使用方法:

int a[50];

memset(a,0,sizeof(a));

这样呢,就将数组a内所有的值都赋成0了,sizeof是一个一元操作符,得到数组a的字节大小。

另外需要注意的是,memset函数是逐字节进行填充,所以a一般为char *型。对于其它类型的a,可以填充的值有两个,0和-1。因为计算机中用二进制补码表示数字,0和二进制补码为全0,-1的二进制补码为全1。

memset是一个字节一个字节的设置,把一个int的每个字节都设置为1,也就是0x01010101,十进制就是16843009

要初始化1怎么办?

要设int数组为1,就用for循环一个个设置就行了。或者枚举也可以

时间: 2024-10-03 14:38:19

为什么memset不能将数组元素初始化为1?的相关文章

数组与字符串初始化为空的深入理解

正题 1. 一维数组初始化,可以只给一部分元素赋值,如下 int a[10] = {0,1,2,3,4}; 这样只给前面的5个元素赋值,后5个元素为0. 将char p[8]; 看作是字符数组的话, charp[8]={0}; 表示第一个元素为0,后面的7个元素也为0; 所以 char p[8] = {}和charp[8]={0}一样; 8个元素都初始化为0 2.用字符串常量来使字符数组初始化 char p[10] = "china"; 前5个元素为'c','h','i','n','a

memset()初始化为1的那些事

问题代码: 1 #include <stdio.h> 2 #include <string.h> 3 int main() { 4 int array[5]; 5 int a; 6 while(~scanf("%d",&a)){ 7 memset(array,a,sizeof(array)); 8 printf("%d %d\n",array[0],array[1]); 9 } 10 return 0; 11 } 程序功能:初始化数组

如何将数组初始化为全0?

C语言中,声明数组的语句: int arr[100]; 这样声明得到的数组里面的存储的是随机的我们不知道的数据,对用户来说就是垃圾.有许多情况我们要将数组初始化为全零的情况才能进行其他操作. 最简单的方法就是用一个循环吧数组所有元素设置为0: int arr[100]; int i = 0; for(i = 0 ; i < 100 ; i++) arr[i] = 0; //This will make all ZERO 我们还可以利用其他几种方式做到初始化数组为0: 1.全局变量和静态变量初始化

使用函数指针,完成一个sort()函数,能对任何类型的数组元素进行排序: 回调函数 以及 memcpy ()原型实现

进来复习了一下C语言指针,一直没有写过太多关于函数指针的代码,而且对回调函数的理解一直都是在理论上,基本上没有太写过关于它的代码,进来得空,写了一个小程序加深下自己对回调函数和函数指针的理解. 问题描述: 编写一个sort()函数,使它能够对任何类型的数组元素进行排序. 下面是我写的代码: /* 使用函数指针的回调函数技巧,设计一个能排序int 和char 数组的sort()函数 */ #include<stdio.h> #include<stdlib.h> #include<

PAT自测_打印沙漏、素数对猜想、数组元素循环右移、数字加倍重排、机器洗牌

00-自测1. 打印沙漏(20) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐:相邻两行符号数差2:符号数先从大到小顺序递减到1,再从小到大顺序递增:首尾符号数相等. 给定任意N个符号,不一定能正好组成一个沙漏.要求打印出的沙漏能用掉尽可能多的符号. 输入格式: 输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔. 输出格式: 首先

指针初始化为NULL的作用

关于空指针NULL.野指针.通用指针,首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了. 假设 有语句 int a=10;那么编译器就在内存中开辟1个整型单元存放变量a,我们假设这个整型单元在内存中的地址是 0x1000:那么内存0x1000单元中存放了数据10,每次我们访问a的时候,实际上都是访问的0x1000单元中的10.现在定义:int *p:                 p=&a:当编译器遇到语句int *p时,它也会在内存中给指针变量p分配一个内存单元,假设这个

[算法]一整型数组,除了0之外,其他不重复,判断数组元素是否相邻

数组元素是非负整数,0可以化为任意正整数,要求时间复杂度为O(n) 觉得很奇怪的题目,遍历一次找到最值相减得到极差就行了,如果极差小于数组长度n,则元素相邻,否则不相邻 bool is_adjacent(int* a, int n){ int min = 65535, max = 0; for(int i = 0; i < n; ++i){ if(!a[i] && a[i] < min){ min = a[i]; } else if(!a[i] && a[i]

【找数组元素最大值的十四种方法】for【练习知识点和总结】

以下是心血成果,版权所有,未经允许,不得转载.作者:李金涛:FROM:光环国际 AT:201712172024.(方便以后,再次修改) <script> // 比较数组中数值的大小是比较常见的操作,比较大小的方法有多种,下面来介绍如下十四种方法,原理代码如下: // 1,排序取值:sort比较器排序(常用),以及冒泡排序(不常用,但方法思想很重要);// 2,假设比较取大值:假设max=arr[0];index=0; 在循环往后比较,如果有比max大的数就让max记录下大的数,索引赋给inde

1008. 数组元素循环右移问题 (20)

1008. 数组元素循环右移问题 (20) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--AN-1)变换为(AN-M -- AN-1 A0 A1--AN-M-1)(最后M个数循环移至最前面的M个位置).如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法? 输入格式:每个输入包含一个测试用例,第1行输入N ( 1<=N<=100).M(M>=0):第2行输入N个整数,之间用空格