sizeof

C++ 中的 sizeof()

你说的曾经没有我的故事 提交于 2020-03-07 04:07:02
【牛客题目1】在Visual C++ 和 Mingw64平台上,short a[100], sizeof(a) 返回什么? A. 2 B. 4 C. 100 D. 200 E. 400 答案:D Reference: https://www.nowcoder.com/test/question/done?tid=31013888&qid=1490#summary 解析:short int: 2个字节 【1.1】 sizeof 返回的数值表示的含义如下(单位字节) 数组 - 编译时分配的数组空间大小 【1.1】(特别地,若数组作为参数被传入函数中做sizeof()运算,则和指针运算没区别)【1.2】 指针 - 存储该指针所用的空间大小 (存储该指针的地址长度,是长整型,应该为4) 【2】 类型 - 该类型所占用的空间大小 【3】 对象 - 对象的实际占用空间大小 【4】 函数 - 函数的返回类型所占的空间大小。函数的返回类型不能是void【5】 【题目2-13】 1 char str[] = "Hello"; 2 char *p = str; 3 int n = 10; 4 sizeof(str) = 6; // H,e,l,l,o,\0 [1.1] 5 sizeof(p) = 4; // [2] 6 sizeof(n) = 4; // [3] 7 void Func(char

HDUOJ 4965 Fast Matrix Calculation

纵饮孤独 提交于 2020-03-06 11:03:30
HDUOJ 4965 Fast Matrix Calculation 题目链接 Problem Description One day, Alice and Bob felt bored again, Bob knows Alice is a girl who loves math and is just learning something about matrix, so he decided to make a crazy problem for her. Bob has a six-faced dice which has numbers 0, 1, 2, 3, 4 and 5 on each face. At first, he will choose a number N (4 <= N <= 1000), and for N times, he keeps throwing his dice for K times (2 <=K <= 6) and writes down its number on the top face to make an N K matrix A, in which each element is not less than 0 and not greater than 5. Then he does similar thing again

C++实现企业链表(单向链表的另外一种实现方式)

北战南征 提交于 2020-03-06 08:52:29
LinkList.h #include <windows.h> #include <stdio.h> // 链表小结点 typedef struct LINKNODE { LINKNODE* next; }LinkNode; // 链表结点 typedef struct LINKLIST { LinkNode head; int size; }LinkList; // 遍历结点的函数指针 typedef void(*PRINTLINKNODE)(LinkNode*); // 比较函数指针 typedef int(*COMPARENODE)(LinkNode*, LinkNode*); // 初始化链表 LinkList* Init_LinkList(); // 根据位置插入语一个结点 void Insert_LinkList(LinkList* list, int pos, LinkNode* data); // 根据位置删除一个结点 void RemoveByPos_LinkList(LinkList* list, int pos); // 查找结点 int Find_LinkList(LinkList* list, LinkNode* data, COMPARENODE compare); // 返回链表的大小 int Size_LinkList(LinkList* list)

关于sizeof和strlen,

允我心安 提交于 2020-03-06 05:38:45
size of: 是统计 对象所占的存储单元(字节)个数的运算符 。在程序编译阶段得出其值。用于表示字符串长度时所得结果 包含字符\0的长度 。 参数可以是指针、数组、类型、对象和函数等。 strlen: 一般用来 统计字符串中字符的个数的函数 ,且只能用于计算字符串的长度,用于 表示从当前位到字符\0(不包含字符\0)所占的字符个数 。 参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就隐式转化为指针了。 下面用一些示例来具体说明: int a[] = {1,2,3,4}; printf("%d\n", sizeof(a));//该数组长所占字节数为4*4=16 printf("%d\n", sizeof(a + 0));//当a+0时,a便隐式转换成了指针,此时计算首元素所占字节数。答案为4 printf("%d\n", sizeof(*a));//*a指向数组a的整形元素1,该元素占4个字节, printf("%d\n", sizeof(a + 1));//同2 printf("%d\n", sizeof(a[1]));//计算第二个整形元素2所占字节数 printf("%d\n", sizeof(&a));//指针4字节 printf("%d\n", sizeof(*&a));//*与&互相抵消,然后原理同1 printf("%d\n", sizeof

Linux TCP server系列(4)-浅谈listen与大并发TCP连接

牧云@^-^@ 提交于 2020-03-06 04:39:37
背景: 服务器在调用 listen 和 accept 后,就会阻塞在 accept 函数上, accpet 函数返回后循环调用 accept 函数等待客户的 TCP 连接。如果这时候又大量的用户并发发起 connect 连接,那么在 listen 有队列上限 ( 最大可接受 TCP 的连接数 ) 的情况下,有多少个 connect 会成功了。试验证明,当连接数远远高于 listen 的可连接数上限时,客户端的大部分 TCP 请求会被抛弃,只有当 listen 监听队列空闲或者放弃某个连接时,才可以接收新的连接,那么我们应该如何来避免这种情况出现? 分析: (一)客户端 客户端运行初期完成所设定的一定量的 socket 创建和相应的处理线程的创建 ,然后使用 条件变量来完成线程同步 ,直到最后一个线程创建完成,才 向所有线程发出广播通知,让所有线程并发调用 connect ,连接成功则关闭连接,失败则返回,如下代码所示。 socket 创建和线程创建: int testCount=300; // 并发用户数 /* 每个进程需要自己独立的栈空间, linux 下默认栈大小是 10M ,在 32 位的机子上一个进程需要 4G 的内存空间,去掉自己的栈空间全局程序段空间,一般只有 3G 内存可以用,创建线程时就需要从这 3G 的空间中分配 10M 出来,所以最多可以分配 300 个线程

[luogu4768] [NOI2018] 归程 (Dijkstra+Kruskal重构树)

烈酒焚心 提交于 2020-03-06 00:56:03
[luogu4768] [NOI2018] 归程 (Dijkstra+Kruskal重构树) 题面 题面较长,这里就不贴了 分析 看到不能经过有积水的边,即不能经过边权小于一定值的边,我们想到了kruskal重构树。我们把边按海拔高度从大到小排序,然后建立一棵Kruskal重构树。 树上维护什么呢?我们除了在点上记录高度外,把最底层的点1~n的权值设为点i到1的最短路径长度,然后维护子树最小值。我们在Kruskal重构树上从v开始树上倍增,找到深度最浅的高度>=水位线的点x,这样x子树中的点都是开车可以到达的,而最小步行距离就是x子树中的点对应到原图上后,到点1的距离。 代码 //https://www.luogu.org/problem/P4768 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<cmath> #define maxn 200000 #define maxm 400000 #define maxlogn 23 using namespace std; typedef long long ll; int t; int n,m,q,k,s; struct graph { struct edge { int from;

C中的sizeof要点

為{幸葍}努か 提交于 2020-03-05 16:40:37
对函数使用sizeof,在编译阶段会被函数返回值的类型取代。如:首先要明确sizeof不是函数,也不是一元运算符,它是个类似宏定义的特殊 关键字 ,sizeof();括号内在编译过程中是不被编译的,而是被类型替代。 如 int a=8;sizeof(a++); 在编译过程中,a的值不会变,只是被替换成类型sizeof(int);结果为4. 如 sizeof(a=6); 呢,也是一样的转换成a的类型,但是要注意 因为a=6是不被编译的,所以执行完 sizeof(a=6);a的值还是8,是不变的! 记住一下结论: 1.unsigned影响的只是最高位bit的意义(正负),数据长度不会被改变的。所以 sizeof(unsigned int) == sizeof(int); 2. 自定义类型的sizeof取值等同于它的类型原形。如 typedef short WORD;sizeof(short) == sizeof(WORD)。 3. 对函数使用sizeof,在编译阶段会被函数返回值的类型取代。如: int f1(){return 0;}; cout << sizeof(f1()) <<endl; // f1()返回值为int,因此被认为是int 4. 只要是指针,x86就是4,x64就是8。如:cout < <sizeof(string*) < <endl; // 4 5.

C++11 静态断言(static_assert)

喜欢而已 提交于 2020-03-05 15:23:18
简介 C++0x中引入了 static_assert 这个关键字,用来做编译期间的断言,因此叫做静态断言。 其语法很简单: static_assert (常量表达式,提示字符串)。 如果第一个参数常量表达式的值为真(true或者非零值),那么 static_assert 不做任何事情,就像它不存在一样,否则会产生一条编译错误,错误位置就是该 static_assert 语句所在行,错误提示就是第二个参数提示字符串。 说明 使用 static_assert ,我们可以在编译期间发现更多的错误,用编译器来强制保证一些契约,并帮助我们改善编译信息的可读性,尤其是用于模板的时候。 static_assert 可以用在全局作用域中,命名空间中,类作用域中,函数作用域中,几乎可以不受限制的使用。 编译器在遇到一个 static_assert 语句时,通常立刻将其第一个参数作为常量表达式进行演算,但如果该常量表达式依赖于某些模板参数,则延迟到模板实例化时再进行演算,这就让检查模板参数成为了可能。 由于之前有望加入C++0x标准的 concepts 提案最终被否决了,因此对于检查模板参数是否符合期望的重任,就要靠 static_assert 来完成了,所以如何构造适当的常量表达式,将是一个值得探讨的话题。 性能方面,由于是 static_assert 编译期间断言,不生成目标代码,因此

开篇词The Start以及[Vjudge][HDU2242]空调教室

给你一囗甜甜゛ 提交于 2020-03-05 10:48:01
这是我写的第一篇记录好题的博客,也是博客园上我发布的第一篇博客。 以后我的所有博客都将在洛谷和博客园上同时发布,同志们有兴趣的在哪里都可以看一看。 [https://www.luogu.com.cn/blog/DarthVictor/#](洛谷博客) [https://www.cnblogs.com/DarthVictor/](博客园) 那么今天要记录的就是: 空调教室! 题目如下: 题面 众所周知,HDU的考研教室是没有空调的,于是就苦了不少不去图书馆的考研仔们。Lele也是其中一个。而某教室旁边又摆着两个未装上的空调,更是引起人们无限YY。 一个炎热的下午,Lele照例在教室睡觉的时候,竟然做起了空调教室的美梦。 Lele梦到学校某天终于大发慈悲给某个教室安上了一个空调。而且建造了了M条通气管道,让整个教学楼的全部教室都直接或间接和空调教室连通上,构成了教室群,于是,全部教室都能吹到空调了。 不仅仅这样,学校发现教室人数越来越多,单单一个空调已经不能满足大家的需求。于是,学校决定封闭掉一条通气管道,把全部教室分成两个连通的教室群,再在那个没有空调的教室群里添置一个空调。 当然,为了让效果更好,学校想让这两个教室群里的学生人数尽量平衡。于是学校找到了你,问你封闭哪条通气管道,使得两个教室群的人数尽量平衡,并且输出人数差值的绝对值。 Input 本题目包含多组数据,请处理到文件结束

hdu1814 Peaceful Commission

狂风中的少年 提交于 2020-03-05 06:18:24
hdu1814 Peaceful Commission 题意:2-sat裸题,打印字典序最小的 我写了三个 染色做法,正解 scc做法,不管字典序 scc做法,错误的字典序贪心 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int N = 2e4+5, M = 1e5+5; inline int read() { int x = 0, f = 1; char c = getchar(); while(c<'0' || c>'9') {if(c=='-') f=-1; c=getchar();} while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();} return x * f; } int n, m; struct edge {int v, ne;} e[M]; int cnt, h[N]; inline void ins(int u, int v) { e[++cnt] = (edge) {v, h[u]}; h[u] = cnt; } inline int id(int x) {return ((x-1)^1)+1;} int col