sizeof

求素数算法-网摘

自闭症网瘾萝莉.ら 提交于 2020-02-01 04:10:42
摘自: http://www.cnblogs.com/luluping/archive/2010/03/03/1677552.html 浅析求素数算法 注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度 1. 根据概念判断: 如果一个正整数只有两个因子, 1和p,则称p为素数. 代码: bool isPrime(int n) { if(n < 2) return false; for(int i = 2; i < n; ++i) if(n%i == 0) return false; return true; } 时间复杂度O(n). 2. 改进, 去掉偶数的判断 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; if(n%2==0) return false; for(int i = 3; i < n; i += 2) if(n%i == 0) return false; return true; } 时间复杂度O(n/2), 速度提高一倍. 3. 进一步减少判断的范围 定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个因子d. 证明: 如果n不是素数, 则由定义n有一个因子d满足1<d<n. 如果d大于sqrt(n), 则n/d是满足1<n/d<

浅析求素数算法

那年仲夏 提交于 2020-02-01 04:09:26
浅析求素数算法 转载: http://www.linuxsir.org/bbs/showthread.php?t=278294 注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度 1. 根据概念判断: 如果一个正整数只有两个因子, 1和p,则称p为素数. 代码: 1 bool isPrime(int n)2 {3 if(n < 2) return false;4 for(int i = 2; i < n; ++i)5 if(n%i == 0) return false;6 return true;7 } 时间复杂度O(n). 2. 改进, 去掉偶数的判断 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; for(int i = 3; i < n; i += 2) if(n%i == 0) return false; return true;} 时间复杂度O(n/2), 速度提高一倍. 3. 进一步减少判断的范围 定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个因子d. 证明: 如果n不是素数, 则由定义n有一个因子d满足1<d<n. 如果d大于sqrt(n), 则n/d是满足1<n/d<=sqrt(n)的一个因子. 代码: bool isPrime

Sizeof与Strlen的区别与联系

两盒软妹~` 提交于 2020-02-01 01:52:18
1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。 sizeof还可以用函数做参数,比如: short f(); printf("%d\n", sizeof(f())); 输出的结果是sizeof(short),即2。 4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。 5.大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因 char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); //而b=20; 6.strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。 7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。 8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小, 当适用一静态地空间数组, sizeof 归还全部数组的尺寸。 sizeof

指针、数组与sizeof运算符

那年仲夏 提交于 2020-02-01 01:51:37
1、sizeof是C语言的一个运算符(主要sizeof不是函数,虽然用法很像函数),sizeof的作用是用来返回()里边 的变量或者数据类型占用的内存字节数。 2、sizeof存在的价值: 主要是因为在不同平台下各种数据类型所占的内存字节数不尽相同(譬如int在32位系统上为4字节,在16位系统上 为2字节)。所以程序中需要使用sizeof来判断当前变量/数据类型在当前环境下占几个字节。 3、举例说明: 例子1:char str[] = "hello"; sizeof(str) //元素所占的字节数,也就是数组的大小 占6个字节 sizeof(str[0]) //第0个元素,第0个元素是char型的,所以 占1个字节 sizeof(str) //字符串的长度(不包含最后的\0), 占5个字节 例子2:char str[] = "hello"; char *p = str;//str做右值,相当于首元素的首地址,数组的元素是char型, //那么str就是char *,刚好匹配 sizeof(p) //p本身是一个指针变量,跟p指向的变量一点关系没有;只是一个char *指针的长度, //32位系统上所有的指针的长度都是4 sizeof(*p) //p所指向的变量,p所指向的变量是char型的,相当于sizeof(char) 自然是1 strlen(p) //相当于strlen

strlen与sizeof区别(转载)

非 Y 不嫁゛ 提交于 2020-02-01 01:49:11
#include "stdio.h" #include "string.h" void main() { char aa[10]; printf("%d",strlen(aa)); printf("%d",sizeof(aa)); } 程序运行得到结果是strlen(aa)=15.sizeof(aa)=10;这是怎么回事呢?strlen是有效字符串的长度,不包含‘\0’,与初始化有关系,而sizeof与初不初始化没有关系。下面我们看看它们的区别吧(以下都是在网上查的) strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,知道遇到'\0'停止。 char aa[10];cout<<strlen(aa)<<endl; //结果是不定的 char aa[10]={'\0'}; cout<<strlen(aa)<<endl; //结果为0 char aa[10]="jun"; cout<<strlen(aa)<<endl; //结果为3 而sizeof()函数返回的是变量声明后所占的内存数,不是实际长度。 sizeof(aa) 返回10 int a[10]; sizeof(a) 返回40 1.sizeof操作符的结果类型是size_t

sizeof与strlen的区别

拜拜、爱过 提交于 2020-02-01 01:47:39
1.sizeof是操作符,strlen是函数 2.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型,该类型保证能容忍实现所建立的最大对象的字节大小。 3.大部分编译程序sizeof为编译时已计算大小,而strlen要在运行时计算,计算的是字符串的大小,不是类型占内存的大小。 4.sizeof可以用类型做参数,strlen只能用car *做参数,且需以“\0”为结尾。 5.sizeof如果是类名,必须加括号,如果是变量名,可以不加。 6计算字符串数组的长度上有区别,strlen为计算数组内大小,sizeof为计算数组分配大小,不受存储内容改变而改变。 7.如果要计算指针指向的字符串长度,则一定要用strlen,sizeof为4。 来源: https://www.cnblogs.com/sozze011/p/10852527.html

C语言趣味题目

江枫思渺然 提交于 2020-01-31 11:39:55
http://sunxiunan.com/?p=1647 在这个网站上 http://stevenkobes.com/ctest.html 发现一套很有趣的C语言测试题,如果你招聘C语言相关开发人员,或者正在学习C语言,很值得参考。 如果没有做,下面内容暂时不要看,最好自己先完成一遍。 —————————————– OK,假设你做的答案没有完全正确,那你可以继续看下去了,否则,后面内容对你来说就是小菜一碟,不值得看。 ——————————————– 第一题: #include <setjmp.h> static jmp_buf buf; int main(void) { volatile int b = 3; if (setjmp(buf) != 0) { printf(“%d\n”, b); exit(0); } b = 5; longjmp(buf, 1); } 输出结果为A)3 B)5 C)0 D)都不是 答案为B,也就是输出5。 关键点在于理解setjmp以及longjmp,( http://en.wikipedia.org/wiki/Setjmp.h )第一次运行到setjmp,会设置jmp_buf,然后返回0。当调用longjmp时,会把longjmp里面的非0值作为setjmp的返回值返回(如果longjmp的value参数为0,setjmp恢复后返回1

memset()函数及其作用

旧城冷巷雨未停 提交于 2020-01-31 09:50:32
我曾天真的以为 memset(a,0,sizeof(a))中的0可以用任意数替换 但是~ 实际上这是错误的 memset的功能 : 是将一快内存中的内容以 单个字节 逐个拷贝的方式放到指定的内存中去. 对于这一点我们拿memset(a, -1, sizeof a), 和memset(a, 1, sizeof a) (a为int类型)两个表达式进行举例. 先看memset(a, -1, sizeof a): 1个int是四个字节: -1 的补码是 11111111 11111111 11111111 11111111 (int) memset中的-1之占据一个字节 11111111 () memset()函数每次拷贝 拷贝一个字节,即: 11111111, 由于int中-1的四个字节都是相同的,所以最终结果能正确的输出-1; 表达式换成memset(a, 1, sizeof a)的话, 1 的源码和补码相同都是 00000000 00000000 00000000 00000001(int) memset中的1占据一个字节 00000001 memset()执行过后,每次拷贝一个字节,即 00000001 ,一个int就是4个字节合并到一起 就是 00000001 00000001 00000001 00000001 进行输出的话就是 16843009 所以这段代码执行过后会输出

C语言动态存储分配

孤街醉人 提交于 2020-01-31 06:09:25
动态存储分配 C语言支持动态存储分配,即在程序执行期间分配内存单元的能力,利用动态存储分配,可以根据需要设计扩大(或缩小)的数据结构,虽然可以适用于所有类型的数据,但是动态存储分配更常用于字符串、数组和结构体 本文地址: http://www.cnblogs.com/archimedes/p/c-dynamic-storage-allocation.html ,转载请注明源地址。 1、内存分配函数 3种内存分配函数都是声明在<stdlib.h>中: malloc函数--分配内存块,但是不对内存块进行初始化 calloc函数--分配内存块,并且对内存块进行消除 realloc函数--调整先前分配的内存块 malloc函数不需要对分配的内存快进行清除,所以它比calloc函数更高效 当申请内存块而调用内存分配函数的时候,函数会返回void*型的值。内存中对象的空间大小,是以“字节”的数目为单位计算的,许多头文件都定义了size_t类型,专门用来保存这种“内存”空间的相关信息,比如sizeof运算符返回字节的数目,类型是size_t 2、空指针 由于用名NULL的宏来表示空指针,所以常使用下列方式测试malloc函数的返回值: p=malloc(10000); if(p==NULL) { /*分配失败*/ } 在C语言中,指针测试真假的方法和数的测试一样: if(p==NULL) if(

c++字符字面值常量

喜夏-厌秋 提交于 2020-01-31 04:55:18
c++字符字面值常量 // by 鸟哥 qq1833183060 字符字面量 # include <iostream> # include <string> # include <cstdlib> # include <iomanip> void printCode ( auto c ) { int len = sizeof ( c ) ; std :: cout << std :: hex ; std :: cout << "code:" ; unsigned char * p = ( unsigned char * ) & c ; for ( int i = 0 ; i < len ; i ++ ) { unsigned char code = * ( p + i ) ; if ( code == 0 ) { std :: cout << std :: setfill ( '0' ) << std :: setw ( 2 ) << "0" << " " ; } else { std :: cout << std :: setfill ( '0' ) << std :: setw ( 2 ) << ( int ) code << " " ; } } std :: cout << std :: endl ; } int main ( ) { auto a = 'a' ; /