- 博客(17)
- 收藏
- 关注
转载 图说C++对象模型:对象内存布局详解
图说C++对象模型:对象内存布局详解0.前言文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局、虚表指针、虚基类指针等有深入了解的朋友可以慢慢看。本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。文章如果有解释不清、解释不通或疏漏的地方,恳请指出。1.何为C++对象模型?引用《深
2017-03-23 14:53:45 341
转载 关于整形溢出(转载至CollShell)
整型溢出有点老生常谈了,bla, bla, bla… 但似乎没有引起多少人的重视。整型溢出会有可能导致缓冲区溢出,缓冲区溢出会导致各种黑客攻击,比如最近OpenSSL的heartbleed事件,就是一个buffer overread的事件。在这里写下这篇文章,希望大家都了解一下整型溢出,编译器的行为,以及如何防范,以写出更安全的代码。什么是整型溢出C语言的整型问题相信大家并不陌生了
2015-12-08 15:04:26 569
转载 深拷贝与浅拷贝
C++中对象的复制就如同“克隆”,用一个已有的对象快速地复制出多个完全相同的对象。一般而言,以下三种情况都会使用到对象的复制:(1)建立一个新对象,并用另一个同类的已有对象对新对象进行初始化,例如:[cpp] view plaincopyclass Rect { private: int width; int height; };
2015-12-08 14:05:40 209
原创 关于单链表的一些基本操作
1.首先创建一个包含数据和指向该结构体的结构体即链表的节点#pragma one#include#include#includetypedef int DataType;typedef struct ListNode{ DataType _data; struct ListNode* _next;}ListNode; 2.链表的基本操作函数//创造一个存储x的新节点Li
2015-11-19 11:40:24 238
原创 关于sizeof和strlen
#include#includevoid Func(char str_arg[100]){ printf("%d\n", sizeof(str_arg));//4}int main(void){ char str[] = "Hello"; printf("%d\n", sizeof(str));//6 printf("%d\n", strlen(str));//5 char
2015-11-05 12:33:23 237
原创 可变参数
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )//((sizeof(3) + sizeof(int) - 1) & ~(sizeof(int) - 1) )//((3 + 4 - 1) &~(4 - 1) ) 将n的值提升为int(可为其他类型)的整数倍// 例如 3->4 2
2015-11-03 09:09:44 241
转载 深入理解按位异或运算符
参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。即: 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0例如:10100001^00010001=10110000按位异或的3个特点:(1) 0^0=0,0^1=1 0异或任何数=任何数(2) 1^0=1,1^1=0 1异或任何
2015-11-01 11:24:41 269
原创 最大公约数与最小公倍数
#include void main() { int m,n,p,s; printf("输出m和n的值:"); scanf("%d %d",&m,&n); p = m * n; while(n != 0) { s = m % n;//核心算法为:辗转相除法 m = n; n = s; } printf("最大公约数为%d\n",m); pr
2015-10-24 23:19:56 251
原创 求出1--100之间的素数
方法一:#include void main() { int i,j; for(i = 2;i <= 100;i++) { for(j = 2;j <=i/2;j++)//如果一个数不能整除小于它本身一半的任何数,这个数必为素数 { if(i % j ==0) break; } if(j > i/2) printf("%d ",i)
2015-10-24 23:12:37 895
转载 输入一行字符,统计其中有多少个单词,单词之间用空格分隔
在编写程序中容易直接写成计算这一行字符串中的字符的个数例如:#include void main() { char ar[80]; gets(ar); int num = 0,space = 0; int i; for(i = 0;ar[i] != '\0';i++) { if(ar[i] != ' ') num++; else space++;
2015-10-22 12:05:53 2833
原创 斐波那契数列
#include void main() { int ar[20] = {1,1},i; for(i = 2; i < 20;i++) ar[i] = ar[i - 2] + ar[i - 1]; for(i = 0; i < 20;i++) { printf("%d\t",ar[i]); if(i >1 && (i + 1) % 5 ==0) pr
2015-10-18 21:26:30 194
原创 malloc、calloc、realloc与free简要
1.malloc函数 malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。 函数原型为 void *malloc(unsigned int size); size不允许负值 返回值 如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不
2015-10-18 17:39:46 266
原创 用函数实现两个数的交换
#include void main() {int i,j;void swap(int*x,int*y);printf("i = ");scanf("%d",&i);printf("j = ");scanf("%d",&j);printf("\n");swap(&i,&j);printf("i = %d,j = %d\n",i,j); } voi
2015-10-17 23:34:45 831
原创 字符串初始化与赋值区别
字符串初始化和赋值的区别: 初始化 Char str[] = “abcdef” // 合法 赋值char str[10] ;str[10] = “abcde”; //错误1.字符串赋值过程中不存在str[10],最大仅能是str[9]、2.在字符串赋值的过程中需要从str[0]开始
2015-10-17 17:45:51 497
原创 冒泡排序法
#include void main() {int ar[10];int i,j,t;printf("输入十个数:");for(i = 0;i scanf("%d",&ar[i]);for(j = 0;j for(i = 0;i if(ar[i] > ar[i + 1]){t = ar[i];ar[i] = ar[i + 1];ar[i +
2015-10-17 11:40:06 410
原创 n个不同的数可组成多少个不同的三位数
#include void main() {int i,j,k;int S,count = 0,n;printf("输入n的个数:");scanf("%d",&n);for(i = 0;i for(j = 0;i for(k = 0;k { S = 100 * i + 10 * j + k;count++;print
2015-10-13 22:07:34 547
原创 输出菱形
用c语言实现菱形的输出#include void main() { int i,m,n;for(i = 0;i {for(m = 0;m printf(" ");for(n = 0;n printf("*");printf("\n");}for(i = 0;i {for(m = 0;m printf(" ");for(n =
2015-10-13 21:33:16 444
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人