sizeof

strlen&&sizeof

懵懂的女人 提交于 2020-03-01 17:40:59
sizeof 和 strlen 有以下区别:  sizeof 是一个操作符,strlen 是库函数。  sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾为‘\ 0‘的字符串作参数。  编译器在编译时就计算出了 sizeof 的结果。而 strlen 函数必须在运行时才能计算出来。并且 sizeof 计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。  数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。 int _tmain(int argc, _TCHAR* argv[]) { //strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0', // 如果你只定义没有给它赋初值,这个结果是不定的 // 它会从aa首地址一直找下去,直到遇到'\0'停止 //而sizeof()返回的是变量声明后所占的内存数,不是实际长度, //此外sizeof不是函数,仅仅是一个操作符,strlen是函数。 char aa[10]; std::cout << strlen(aa) << endl; //结果是不定的 char bb[10]={'\0'}; std::cout << strlen(bb) << endl; //结果为0 char cc[10] = "hui"; std:

C和C++中的sizeof

一曲冷凌霜 提交于 2020-03-01 17:35:16
今天伯乐在线看到一个携程2016研发工程师的题目,自己做了一下,题目很简单: #include<stdio.h> int main() { char c='0'; printf("%d %d",sizeof(c),sizeof('0')); return 0; } 编译和执行上述c语言代码,系统将会输出什么? 1 4 2 2 1 1 2 1 下面是我在Mac上用gcc和g++编译的代码以及结果: //C++文件 #include<iostream> #include<stdio.h> using namespace std; int main(void) { char a = '0'; printf("%ld,%ld",sizeof(a),sizeof('0')); return 0; } //输出结果为1,1 //C文件 #include<stdio.h> int main(void) { char a = '0'; printf("%ld,%ld",sizeof(a),sizeof('0')); return 0; } 输出结果为1,4 造成结果有这样差异的解释如下: C语言的规定是把sizeof(‘0’)解析为sizeof(int),int为4字节 C++则规定为sizeof(‘0’)解析为sizeof(char),char为1字节 来源: oschina 链接: https

HDU-2093考试排名

浪尽此生 提交于 2020-03-01 17:34:46
题目链接 HDU-2093 题意 实时评测系统根据提交时间和对错误次数罚时进行排名。 思路 结构体存储学生信息 采用字符串读入,遍历字符串,计算每道题的提交时间和错误次数,存入结构体。 计算所有同学的AC题目以及所用时间,一定要注意罚时的计算规则,没有AC的题目不计算罚时,对结构体进行排名。多要素排序可以重载 < 运算符 bool operator < ( student & p ) { if ( scoresum != p . scoresum ) return scoresum > p . scoresum ; //降序 if ( timesum != p . timesum ) return timesum < p . timesum ; //升序 return name < p . name ; } 注意memset函数的使用方法,头文件 <cstring> , 用法为 void* memset( void* dest, int ch, std::size_t count ); 转换值 ch 为 unsigned char 并复制它到 dest 所指向对象的首 count 个字节。若该对象是潜在重叠的子对象或非可平凡复制 ,则行为未定义。若 count 大于 dest 所指向的对象大小,则行为未定义。 可平凡复制的:(TriviallyCopyable) (例如标量、 C

C总结-part_2-数组&字符串

风流意气都作罢 提交于 2020-03-01 16:54:26
5_数组 & 字符串 数组 数组属于构造数据类型。 数组元素,可以是基本数据类型,也可以是构造类型; 空格 \t 换行 \n ——————————————————————————————————————————————— 数组的大小 int score[10]; sizeof(score); // 40,一个int为4B,10个占用40B sizeof(int); // 4 int length = sizeof(score)/sizeof(int); // 可以通过这种方式计算出数组长度 // 注意:即使数组越界,sizeof依然会返回一个正确的数组元素占用的大小值 // 例如,score[10000],下标越界,但是sizeof依然可以返回4 int len = sizeof(score)/sizeof(score[10000]); ——————————————————————————————————————————————— 数组初始化 int a[10] = {1,2,3,4,5,6,7,8,9,0}; int b[10] = {1,2,3}; // 前3个赋值,后7个全部为默认0; int a[10] = {0}; // 10个元素全部赋值为0 int a[] = {1,2,3,4,5};; // 未指定数组长度,只指定成员 int a[10] = {1}; //

wpa_supplicant与kernel的接口

我怕爱的太早我们不能终老 提交于 2020-03-01 10:22:08
1. 接口定义实现wpa_drivers wpa_drivers的定义如下: [cpp] view plain copy struct wpa_driver_ops *wpa_drivers[] = { #ifdef CONFIG_DRIVER_WEXT &wpa_driver_wext_ops, // 我的系统使用的这个老的接口 #endif #ifdef CONFIG_DRIVER_NL80211 // 现在流行的NL80211接口 &wpa_driver_nl80211_ops, #endif #ifdef CONFIG_DRIVER_HOSTAP &wpa_driver_hostap_ops, #endif #ifdef CONFIG_DRIVER_MADWIFI &wpa_driver_madwifi_ops, #endif #ifdef CONFIG_DRIVER_BROADCOM &wpa_driver_broadcom_ops, #endif #ifdef CONFIG_DRIVER_BSD &wpa_driver_bsd_ops, #endif #ifdef CONFIG_DRIVER_NDIS &wpa_driver_ndis_ops, #endif #ifdef CONFIG_DRIVER_WIRED &wpa_driver_wired_ops, #endif

数据结构28:广义表及M元多项式

Deadly 提交于 2020-03-01 07:41:59
广义表,又称为列表。记作: LS = (a 1 ,a 2 ,…,a n ) ;( LS 为广义表的名称, a n 表示广义表中的数据)。 广义表可以看作是线性表的推广。两者区别是:线性表中的数据元素只能表示单个数据元素;广义表中的单个数据元素 a i ,既可以是单个元素,也可以是广义表。 原子和子表 在广义表中,单个元素被称为 “原子”;包含的广义表被称为 “子表”。 例如: A = () :A 表示一个广义表,只不过表是空的,广义表 A 的长度为 0。 B = (e) :广义表 B 中只有一个原子 e ,长度为 1。 C = (a,(b,c,d)) :广义表 C 中有两个元素,原子 a 和子表 (b,c,d) ,广义表C的长度为 2。 D = (A,B,C) :广义表 D 中有三个元素:子表 A、B、C,长度为 3 ,这种表示方式等同于: D = ((),(e),(b,c,d)) 。 E = (a,E) :广义表 E 中有两个元素,原子 a 和它本身,长度为 2 。这是一个递归的表,等同于:E = (a,(a,(a,…)))。 A = () 和 A = (()) 是不一样的:前者是空表,长度为 0 ;后者表的长度为 1 ,包含的元素是一个子表,只不过这个子表是空表。 表头和表尾 当广义表不为空时,称表中的第一个元素为表的 “表头” ;剩余所有元素组成的表为 “表尾” 。

代码面试之广义表

社会主义新天地 提交于 2020-03-01 06:57:57
广义表的基本概念 广义表(Lists,又称列表) 是线性表的推广。线性表定义为n>=0个元素a1,a2,a3,…,an的有限序列。线性表的元素仅限于原子项,原子是作为结构上不可分割的成分,它可以是一个数或一个结构,若放松对表元素的这种限制,容许它们具有其自身结构,这样就产生了广义表的概念。 广义表是n (n>=0)个元素a1,a2,a3,…,an的有限序列,其中ai或者是原子项,或者是一个广义表。通常记作LS=(a1,a2,a3,…,an)。LS是广义表的名字,n为它的长度。若ai是广义表,则称它为LS的子表。 抽象数据类型广义表的定义如下: ADT Glist { 数据对象: D={ei | i=1,2,..,n;n>=0 ; eiÎAtomSet 或ei ÎGlist, AtomSet为某个数据对象} 数据关系:R1={< ei-1, ei > | ei-1 , ei ÎD,2<=i<=n} 基本操作: InitGList( &L); 操作结果:创建空的广义表L。 CreateGList(&L,S); 初始条件:S是广义表的书写形式串。 操作结果:由S创建广义表L。 DestroyGList(&L); 初始条件:广义表L存在。 操作结果:销毁广义表L。 CopyGList( &T,L); 初始条件:广义表L存在。 操作结果:由广义表L复制得到广义表T。 GListLength

c语言数字转字符串

落花浮王杯 提交于 2020-03-01 01:43:13
对下面代码的一些细节,解释下为什么那么做。 1. char buf[sizeof(int) * 8 + 1] = ""; 这个buf的作用是缓存中间结果,长度没有写死。好处是不同的平台上这段代码都可以执行。 2. if (base < 2 || base > 36) 该判断检查用户传入的进制数是否合法。base < 2 主要过滤负数和0和1。base > 36的意义是在超过10进制的数里,是用字母a表示10的。以此类推z可以表示36。在只使用ascii字符表示大于10的数时,最大的表示值是36,超过这个值就不能表示。 3. uval = -val; 这各写法可以避免一个潜在的坑。当val为int值为INT_MIN时 -val会溢出。表象为-val 的值还是INT_MIN,还是个负数 4.至于为什么用一个无符号整数与一个>0的int进行整除与取余 uval % base uval /= base 因为c语言的标准里没有规定x / y当有一个值为负数时,结果该向x坐标轴的左侧靠近(向0取整) 还是向侧靠近(负无穷) 它只规定了 (x / y) * y + (x % y) = x -14 /5 的结果可以是 -2 或者 -3 至为正数为啥没有两个结果。本人只是用了几个值进行了验证。。 好了贴代码: #include <stdio.h> #include <limits.h>

B+树

孤街浪徒 提交于 2020-02-29 15:46:34
#ifndef __GOODSTREE_H__ #define __GOODSTREE_H__ #define M 200 // 树的枝数。 #define MAX_NUM 60 // 树的深度。 typedef struct _head{ long root; long head; long tail; long number; }Head; template <class T> class TreeNode{ public: int n; long a[M+1]; T key[M]; long prev; long next; BOOL IsLeaf; }; ////////////////////////////////////////////////////////////////// // CGoodsTree 是M路B+树. template <class T> class CGoodsTree{ public: CGoodsTree(){ m_head.root = -1; m_IsUsed = 0;}; ~CGoodsTree(){}; public: BOOL Open(CString& FileName); void Close(); BOOL InsertNode(T& x); BOOL ChangeNode(T& x); BOOL DeleteNode(T&

C语言指针的长度和类型

爱⌒轻易说出口 提交于 2020-02-29 06:27:00
本文地址: http://www.cnblogs.com/archimedes/p/point-length-type.html ,转载请注明源地址。 如果考虑应用程序的兼容性和可移植性,指针的长度就是一个问题,在大部分现代平台上,数据指针的长度通常是一样的,与指针类型无关,尽管C标准没有规定所有类型指针的长度相同,但是通常实际情况就是这样。但是函数指针长度可能与数据指针的长度不同。 指针的长度取决于使用的机器和编译器,例如:在现代windows上,指针是32位或是64位长 测试代码: #include<stdio.h> #include<math.h> #include<stdlib.h> #include<stddef.h> struct p{ int n; float f; }; int main() { struct p *sptr; printf("sizeof *char: %d\n", sizeof(char*)); printf("sizeof *int: %d\n", sizeof(int*)); printf("sizeof *float: %d\n", sizeof(float*)); printf("sizeof *double: %d\n", sizeof(double*)); printf("sizeof *struct: %d\n", sizeof