随笔分类 -  C/C++

Different from the pure C(standard c)
C++ Unicode SBCS 函数对照表
摘要:[转]C++ Unicode SBCS 函数对照表C++ Unicode SBCS 函数对照表,以备日后查阅GenericSBCSUNICODETCHARcharwchar_t_TEOFEOFWEOF_TINTintwint_t_TSCHARsignedcharwchar_t_TUCHARunsig... 阅读全文
posted @ 2015-12-14 13:35 影一辉 阅读(486) 评论(0) 推荐(0)
C/C++内存知识(四)
摘要:C/C++内存知识(四)有了malloc/free 为什么还要new/delete ?malloc与free 是C++/C 语言的标准库函数,new/delete 是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放 阅读全文
posted @ 2011-10-10 16:23 影一辉 阅读(214) 评论(0) 推荐(0)
C/C++内存知识(三)
摘要:C/C++内存知识(三)指针参数是如何传递内存的?如果函数的参数是一个指针,不要指望用该指针去申请动态内存。函数的语句GetMemory(str, 200)并没有使str 获得期望的内存,str 依旧是NULL,为什么?void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); // str is stillNULL still strcpy(str, "hello"); // 阅读全文
posted @ 2011-10-09 17:55 影一辉 阅读(244) 评论(0) 推荐(0)
C/C++内存知识(二)
摘要:C/C++内存知识(二)计算内存容量用运算符sizeof 可以计算出数组的容量(字节数)。int a[3],sizeof(a)的值是12(注意别忘了’\0’)。p是指针,指向a,但是sizeof(p)的值却是4。这是因为sizeof(p)得到的是一个指针变量的字节数,相当于sizeof(char*),而不是p 所指的内存容量。C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针,如下示例:void Func(char a[100]){ cout<< sizeof(a) << endl; / 阅读全文
posted @ 2011-10-09 17:35 影一辉 阅读(174) 评论(0) 推荐(0)
C/C++内存知识(一)
摘要:一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。 4、文字常量区 — 常量字符串就是放在这里的,程序结束后由系统释放 。... 阅读全文
posted @ 2011-10-09 16:58 影一辉 阅读(232) 评论(0) 推荐(0)
关于一个算法题的想法:1000瓶汽水,每喝3瓶赚一瓶,最终喝了多少瓶,剩几个空瓶?
摘要://1000 bottles issues#include<stdio.h>void Bottle(int,int);void Media(int, int);int total;void main(int argc, char* argv[]){Media(1000,3);}void Media(int remain, intn){total = remain;Bottle(remain, n);}void Bottle(int remain, intn){if(remain < n){printf("Remain:%d,Total:%d", remai 阅读全文
posted @ 2011-09-21 10:49 影一辉 阅读(252) 评论(0) 推荐(0)
楼梯问题:一次最多跨两个阶梯,有多少种走法
摘要:采用排列组合的方法在C语言下实现。前24层结果和公布的是一致的,但25层以后出现分歧了,调试几次后没发现问题,测试环境下的int是32位的。疑惑,还请高人指点,显示结果如下:NO20:10946NO21:17711NO22:28657NO23:46368NO24:73735NO25:105676NO26:162973NO27:140125NO28:254929NO29:322365NO30:449574NO31:568275NO32:-45160NO33:249710NO34:523678NO35:969095=======================源代码===============# 阅读全文
posted @ 2011-09-15 18:22 影一辉 阅读(1261) 评论(3) 推荐(0)
八皇后算法与实现(C)
摘要:当在百度里搜索“八皇后”, 会提供很多种在不同语言下的算法与实现。数据结构与算法一直是我的一块心病, 然后我努力的治疗。一.采用递归方式实现。算法思想:在第n行(令从第一行开始)的第一个位置开始放置第n个皇后,然后进行验证是否满足:1.是否与前n-1个皇后都不在同一列(肯定已经不再一行,因为是一行一行的比较的);2.不再同一条斜线上(斜率为1或 -1)。验证成功,则放置第n+1个皇后。知道n为9时,此时八个皇后已经全部放完,可以打印出来。#include<stdio.h>#include<math.h>#define N 8int Grid[N][N];void Out 阅读全文
posted @ 2011-09-14 14:35 影一辉 阅读(634) 评论(0) 推荐(0)
C语言定义数组的几种形式
摘要:数组时常都可以用到,以前用在C语言里用, 后来在C# 里也用,现在回过头来学习C语言,总结一下C语言定义数组的几种形式:以一维数组为例int arr[10];int arr[] = {1,2,4};int arr[10] = {1,2};int *arr = new int[10];前面三种常常都可以用到,但使用第四种时需要注意。在.c文件里使用这种形式编译会不能通过, 但.cpp文件里是可以的,可以推断出这是C++对C的扩展。上面的结论完全来自于Visual Studio环境下的实践,对于tc,bdc,gcc等情况下是否成立有待考证。 阅读全文
posted @ 2011-09-07 19:52 影一辉 阅读(43018) 评论(0) 推荐(0)
关于C语言 内存对齐的问题
摘要:C语言也和扑克牌一样, 易学难精。 对于 内存对齐的问题, 一直知道有这样的事实存在,却没有真的理解过如何来的 。百度百科里给 内存对齐的原因作了一定的阐述: 1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。下面开始对内存对齐的进行具体认识。(演示于VS2010, 以结构体为例)在VS2010里, 默认情况下,编译器会对内存进行自动对齐(以... 阅读全文
posted @ 2011-09-05 18:12 影一辉 阅读(2093) 评论(5) 推荐(1)