字节数组

C语言中关于 strlen 和 sizeof 的用法及区别(含例题及解析)

本秂侑毒 提交于 2019-11-28 09:28:42
一、前言 首先我们需要知道的是,sizeof既是一个单目操作符,也是一个关键字,其作用是求操作数的 类型长度 (以字节为单位)。 而strlen是一个字符串操作函数,是一个 参数为指针类型 返回值为size_t(unsigned int)的函数,求的是 字符串 的长度。 所以现在我们知道 sizeof是一个求操作数类型长度的操作符(关键字),而strlen是一个求字符串长度的字符串操作函数 。 二、sizeof和strlen的用法 2.1 sizeof操作符在简单变量中的用法 int a = 10; char c = 'c'; printf("%d\n",sizeof(a)); //答案是4(操作数a的类型为整型,32位机器中占4个字节,64位机器中占8个字节) printf("%d\n",sizeof(int)); //答案是4 printf("%d\n",sizeof a); //答案是4(求变量的大小时可以去掉括号) printf("%d\n",sizeof int); //错误(求类型的大小时不能去掉括号) printf("%d\n",sizeof(c)); //答案是1(操作数c的类型为字符型,占1个字节) printf("%d\n",sizeof(char)); //答案是1 printf("%d\n",sizeof c); //答案是1(求变量的大小时可以去掉括号)

文件和流

╄→гoц情女王★ 提交于 2019-11-28 06:23:35
IO流:文件和流 回顾 Collection接口 add remove contains clear iterator |_____List (特点:有序的,可以重复) |___ArrayList (存储结构:数组) 查找遍历快,添加删除慢 |___LinkedList (链表)添加删除快,查找遍历慢 |___Vector 数组 (线程安全的) |___Stack 数组(栈)先进后出 | |_____Set(特点:无序的,不能重复) |_____HashSet 哈希表(jdk1.7数组加链表jdk1.8数组链表红黑树) 1 执行hashCode()来计算存储的位置 ,2 执行equals比较结果 |____LinkedHashSet 哈希表 可以保证顺序 |____TreeSet 自平衡红黑二叉树 1 元素要实现Comparable接口 ,2 定制比较器 Comparator Map(特点:存储键值对,键不能重复,一个键对应一个值,值可以重复,无序) |______ HashMap 哈希表 1 执行hashCode()来计算存储的位置 ,2 执行equals比较结果 |______ Hashtable 哈希表 不能存储null键和null值,线程安全的 jdk1.0----》Properties子类 |_______LinkedHashMap 哈希表 可以保证顺序 |______

字节跳动后端实习面经-2019

北战南征 提交于 2019-11-27 10:24:09
字节跳动后端实习面经-2019 一面 算法题 《剑指offer》上面的题目: 题目:数组中一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为 9 的数组{1,2,3,2,2,2,5,4,2}。由于数字 2 在数组中出现了 5 次,超过数组长度的一半,因此输出 2. 面试官要我手撕代码,我写了种用map实现的方式,就是从头到为遍历一遍,然后统计出现次数最多的数,在统计过程中保留最大值,这样的话时间复杂度就是 O ( n ) O(n) O ( n ) . 但是做完后,感觉面试官不是很满意,当然回去以后搜了下答案,大概是用一种PK的方式来实现吧,某个数字出现的次数超过了一半,说明它比其他所有数字的和都要大,则在遍历数组的过程中,保留两个变量:计数器 cnt 和当前数字 cur。这类似于一种打擂台的比赛,有自己的出现,就加一票,不是自己人就见一票,若当前的数字和前面的数字相同,cnt加1;否则查看cnt的值,若为0,则更换cur且cnt加1,否则cnt减1,这样写出来的话代码如下: int findNumHalf ( int * arr , int len ) { if ( arr == NULL || len <= 0 ) { return - 1 ; // Invalid. } int cur = arr [ 0 ] ; int cnt = 0 ; for (

java加密解密工具类

我只是一个虾纸丫 提交于 2019-11-26 16:51:00
package com.founder.mrp.util; import java.nio.charset.StandardCharsets; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import com.founder.mrp.web.jsonEntity.AccountJson; /** * 加密解密类 * @author xiongzq * */ public class EncryptionDecryption { private static String strDefaultKey = "UvVi-s`75X-d9fO3"; /** 加密工具 */ private ThreadLocal<Cipher> encryptCipher = new ThreadLocal<Cipher>() { @Override protected Cipher initialValue() { try { Cipher encryptCipher = Cipher.getInstance(algorithmName); encryptCipher.init(Cipher.ENCRYPT_MODE, key); return

C++指针详解

不羁的心 提交于 2019-11-26 06:01:18
转载:https://www.cnblogs.com/ggjucheng/archive/2011/12/13/2286391.html 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: int *ptr; char *ptr; int **ptr; int (*ptr)[3]; int *(*ptr)[4]; 指针的类型 从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型: int *ptr; //指针的类型是int * char *ptr; //指针的类型是char * int **ptr; //指针的类型是 int ** int (*ptr)[3]; //指针的类型是 int(*)[3] int *(*ptr)[4]; //指针的类型是 int *(*)[4] 怎么样?找出指针的类型的方法是不是很简单? 指针所指向的类型 当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。 从语法上看

C语言查漏补缺

非 Y 不嫁゛ 提交于 2019-11-26 02:30:33
1.C99中struct的柔性数组 // C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员, // 但结构中的柔性数组成员前面必须至少一个其他成员。 // 柔性数组成员允许结构中包含一个大小可变的数组。 // sizeof 返回的这种结构大小不包括柔性数组的内存。 typedef struct st_type { int i; int a[]; // int a[0]; }type_a; // type_a 为 typede f定义的 结构体 st_type 的别名,方便使用 // 定义一个可变长的结构体,用 sizeof(type_a)得到的只有 4,就是 sizeof(i)=sizeof(int)。 // 给结构体分配内存 type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int)); // 为结构体指针 p 分配了一块内存。用 p->a[n]就能简单地访问可变长元素。 // 我们再用 sizeof(*p)测试结构体的大小,发现仍然为 4。 // 在定义这个结构体的时候,模子的大小就已经确定不包含柔性数组的内存大小。 // 柔性数组只是编外人员,不占结构体的编制。 // 用 free 函数来释放内存: // free(p); 2. 利用共用体测试机器大小端 int checkDuan( ) {