sizeof

编程题——31~40

时光毁灭记忆、已成空白 提交于 2019-12-06 08:37:30
三十一、连续子数组的最大和 输入一个整数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 #include <iostream> #include <stdio.h> bool g_InvalidInput = false; int FindGreatestSumOfSubArray( int* pData, int nLength ) { if( pData == NULL || ( nLength <= 0 ) ) { g_InvalidInput = true; return 0; } g_InvalidInput = false; int nCurSum = 0; int nGreatestSum = 0x80000000; for( int i = 0; i < nLength; ++i ) { if( nCurSum <= 0 ) nCurSum = pData[ i ]; else nCurSum += pData[ i ]; if( nCurSum > nGreatestSum ) nGreatestSum = nCurSum; } return nGreatestSum; } void Test( const char* testName, int* pData, int nLength,

emc的4道面试题自解

旧街凉风 提交于 2019-12-06 07:10:38
1.int main() { fork(); fork()&&fork()||fork(); fork(); } 问:共创建了多少进程? 这道题我第一个映像就是短路求值,然后又想到了几何级数,以及fork函数,fork后还有fork 我的答案是20-1=19。前边的20是进程总数,后边-1是创建进程数 第一个fork完后共用2个进程(ID=1,ID=2),第二个fork,当返回值为0时,即子进程时,直接调用倒数第二个fork,于是ID=1,ID=2分别调到第二个fork,然后各调到倒数第二个fork,共形成了8个进程 第二个fork不为0时,即进程为母进程或第一个子进程时,则要看第二个fork如果第二个fork也不为0的话,则不用考虑第三个进程,最先存在两个进程调用最后的fork,然后形成了4个进程 第二个fork!=0,第三个为0时,则需要调用后边两个fork,则为2X2X2=8 所以除去最开始的进程,一共创建19个进程 2.#define NELE(a) (sizeof(a) / sizeof(a[0])) int main() { char str[] = {'E', 'M', 'C'}; for (int d=-1; d<=(NELE(str)-2);d++) printf("%c",str[d+1]); return 0; } 问:输出结果 什么都没输出,根据C99文档

Difference between sizeof(char) and sizeof(char *)

∥☆過路亽.° 提交于 2019-12-06 06:37:01
问题 I'm wondering if there is a difference between sizeof(char) and sizeof(char *) : char *s; s = malloc(sizeof(char*)*len + 1); char *s; s = malloc(sizeof(char)*len + 1); Is this the same ? 回答1: char is a character and sizeof(char) is defined to be 1. (N1570 6.5.3.4 The sizeof and _Alignof operators, paragraph 4) char* is a pointer to a character and sizeof(char*) depends on the environment. It is typically 4 in 32-bit environment and 8 in 64-bit environment. In typical environment where sizeof

一步一步创建聊天程序2-利用epoll来创建简单的聊天室

放肆的年华 提交于 2019-12-06 06:27:01
如图,这个是看视频时,最后的作业,除了客户端未使用select实现外,其它的要求都有简单实现。 服务端代码如下: #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <errno.h> #include <sys/epoll.h> #include <netinet/in.h> #include <unistd.h> #include<netinet/tcp.h> #define MAX_LISTEN 10 #define EPOLL_SIZE 100 struct message { int target_id; char buf[100]; }; struct user_password { char username[100]; char password[100]; }; //设置保活参数 keepalive_time保活时间,keepalive_intvl保活间隔,keepalive_probes保活探测数。 int set_keepalive(int sockfd,int keepalive_time, int keepalive_intvl, int keepalive_probes) { int optval; socklen_t

C语言入坑指南-数组之谜

老子叫甜甜 提交于 2019-12-06 03:35:34
前言 在C语言中,数组和指针似乎总是“暧昧不清”,有时候很容易把它们混淆。本文就来理一理数组和指针之间到底有哪些异同。 数组回顾 在分析之前,我们不妨回顾一下数组的知识。数组是可以存储一个固定大小的相同类型元素的顺序集合。为了便于我们说明,假设有以下数组声明: int a[5]; char b[] = "hello"; 数组大小必须在编译期就作为一个常数确定下来。 但C99中引入了变长数组,允许数组的维度是表达式 ,但在数组分配内存时,其表达式的值可以被求出。 数组下标运算实际上都是通过指针进行的,也就是说a[4]与*(a+4)是等价的,甚至你会发现和4[a]也是一样的。 数组名一般代表了指向该数组下标为0的元素的指针,并且printf("%s\n",hello)与printf("%s\n",&hello[0])等效。 数组和指针不相等 考虑下面的声明: int c[4];//假设int占4字节 int *d; 对于上面的声明,编译器会给c预留内存空间4*4字节,并且数组名代表着指向数组第一个元素的指针。但对于d,却只为指针本身保留了内存空间。 所以此时有下面的操作: c[3]; //合法 *(c+3); //合法 *d; //不合法,d指向了内存中不确定位置 c++; //不合法,一维数组名是指针常量,常量不能被修改掉 d++; //可通过编译 另外,下面的两种情况也是不一样的:

Assign result of sizeof() to ssize_t

送分小仙女□ 提交于 2019-12-06 02:59:22
It happened to me that I needed to compare the result of sizeof(x) to a ssize_t . Of course GCC gave an error (lucky me (I used -Wall -Wextra -Werror )), and I decided to do a macro to have a signed version of sizeof() . #define ssizeof (ssize_t)sizeof And then I can use it like this: for (ssize_t i = 0; i < ssizeof(x); i++) The problem is, do I have any guarantees that SSIZE_MAX >= SIZE_MAX ? I imagine that sadly this is never going to be true. Or at least that sizeof(ssize_t) == sizeof(size_t) , which would cut half of the values but would still be close enough. I didn't find any relation

sizeof variadic template (sum of sizeof of all elements)

时光毁灭记忆、已成空白 提交于 2019-12-06 02:09:41
问题 Considering the following function : template<typename... List> inline unsigned int myFunction(const List&... list) { return /* SOMETHING */; } What is the most simple thing to put instead of /* SOMETHING */ in order to return the sum of sizeof all arguments ? For example myFunction(int, char, double) = 4+1+8 = 13 回答1: unsigned myFunction() {return 0;} template <typename Head, typename... Tail> unsigned myFunction(const Head & head, const Tail &... tail) { return sizeof head + myFunction(tail

多播

北战南征 提交于 2019-12-06 00:26:53
  IP 多播(也称多址广播或组播)技术,是一种允许一台或多台主机(多播源)发送单一数据包到多台主机(一次的,同时的)的 TCP/IP 网络技术。多播是 IPv6 数据包的 3 种基本目的地址类型之一,多播是一点对多点的通信, IPv6 没有采用 IPv4 中的组播术语,而是将广播看成是多播的一个特例。   多播作为一点对多点的通信,数据的收发仅仅在同一分组中进行,是节省网络带宽的有效方法之一。   IP 多播应用大致可以分为三类:点对多点应用,多点对点应用和多点对多点应用。 点对多点应用是指一个发送者,多个接收者的应用形式,这是最常见的多播应用形式。典型的应用包括:媒体广播、媒体推送、信息缓存、事件通知和状态监视等。 多点对点应用是指多个发送者,一个接收者的应用形式。通常是双向请求响应应用,任何一端(多点或点)都有可能发起请求。典型应用包括:资源查找、数据收集、网络竞拍、信息询问等。 多点对多点应用是指多个发送者和多个接收者的应用形式。通常,每个接收者可以接收多个发送者发送的数据,同时,每个发送者可以把数据发送给多个接收者。典型应用包括:多点会议、资源同步、并行处理、协同处理、远程学习、讨论组、分布式交互模拟(DIS)、多人游戏等。 多播地址   IP 多播通信必须依赖于 IP 多播地址,在 IPv4 中它是一个 D 类 IP 地址,范围从 224.0.0.0 到 239.255

Data语意学

纵然是瞬间 提交于 2019-12-06 00:06:56
一、空类大小 #include<iostream> class X { }; class Y:public virtual X { }; class Z:public virtual X { }; class A:public Y,public Z { }; class Point2d { float x; float y; }; class Point3d:public Point2d { }; int main() { std::cout<<"sizeof(X): "<<sizeof(X)<<"\n" <<"sizeof(Y): "<<sizeof(Y)<<"\n" <<"sizeof(Z): "<<sizeof(Z)<<"\n" <<"sizeof(A): "<<sizeof(A)<<"\n"; return 0; }   以上的代码,在linux上编译的输出结果为: sizeof(X): 1 sizeof(Y): 8 sizeof(Z): 8 sizeof(A): 16   对于以上的输出,深度探索C++对象模型的解释是: 1. c++空类对象的大小不为0,它有一个隐藏的1byte大小,用于让同一个class的两个objects在内存中有独一无二的地址 2.语言本身所造成的额外负担,若有virtual base class,那么在derived class中

2019 C/C++《阿里》面试题总结

∥☆過路亽.° 提交于 2019-12-05 23:33:38
一、C和C++的区别是什么? C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。 C中函数不能进行重载,C++函数可以重载 C++在C的基础上增添类,C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 C++中struct和class除了默认访问权限外,别的功能几乎都相同。 二、关键字static、const、extern作用 static和const的作用在描述时主要从类内和类外两个方面去讲: static关键字的作用: (1)函数体内static变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)在模块内的static全局变量和函数可以被模块内的函数访问,但不能被模块外其它函数访问; (3)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝; (4)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。 const关键字的作用: (1)阻止一个变量被改变 (2