C/C++
文章平均质量分 86
LL-Studio
这个作者很懒,什么都没留下…
展开
-
C++编程-类型转换
static_cast用法: static_cast < type-id > ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把...原创 2019-09-06 18:25:11 · 299 阅读 · 0 评论 -
关于 const与*的组合
前几天我们QQ群提出了这么一个问题:http://blog.csdn.net/libbyliugang/article/details/341229请问: int **const a; int *const * a; int const** a;他们的区别?我下线后就写了一些测试程序来作为我对这个问题转载 2012-08-23 16:46:27 · 772 阅读 · 0 评论 -
汇编角度看C中的堆与栈
首先、堆与栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)— 由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表原创 2011-11-03 16:53:19 · 4201 阅读 · 1 评论 -
C中的内存模式(编译模式)
声明: 本文章是转载来自http://blog.csdn.net/wonengxing/article/details/6044576的文章,如果冒犯了您的权益,我会马上删除。 编译模式是指如何在内存中放置程序代码及数据,如何分配堆栈,并确认占用的内存大小及如何存取它们,当指定内存模式(编译模式)以后,语言编译程序将按事先选择好的内存模式编译组织程序,C 语言中提转载 2011-11-02 13:42:54 · 3214 阅读 · 0 评论 -
C语言运算符的“优先级口决”
下面的是我自己总结的关于C优先级的口诀希望对初学C语言语言的同志有所帮助;当然,应用这个口诀的前提是你必须认识所有的C语言的运算符。 优先决括号成员第一; //括号运算符[]() 成员运算符. ->全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&乘除余三,加减四; //这个"余"是指转载 2012-08-23 16:44:06 · 1175 阅读 · 0 评论 -
C语言中的联合体union
文章来自:http://blog.chinaunix.net/space.php?uid=8867796&do=blog&id=358747在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处。首先看一段代码:union my转载 2011-11-22 20:39:25 · 843 阅读 · 0 评论 -
C中位域结合对齐(pragma)的例子及解释
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进转载 2012-09-19 15:36:15 · 1309 阅读 · 0 评论 -
C语言的谜题
C语言的谜题2009年5月31日陈皓发表评论阅读评论32,921 人阅读 摘自:http://coolshell.cn/articles/945.html这几天,本站推出了几篇关于C语言的很多文章如下所示:语言的歧义 [酷壳链接] [CSDN链接]谁说C语言很简单? [酷壳链接] [CSDN链接]6个变态的C语言Hello转载 2012-09-05 21:04:51 · 1502 阅读 · 0 评论 -
C 语言宏定义技巧
学好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义......1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H//头文件内容#endif2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。转载 2012-11-09 13:23:07 · 1101 阅读 · 0 评论 -
如何理解C和C++的复杂类型声明
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。 我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。 需要强调一下的是,复杂的C/C++声明并不转载 2012-11-09 13:39:54 · 633 阅读 · 0 评论 -
判断一个字符串是否回文?
回文的定义: 就是前面看和后面看是一样的。/* 主题:判断一个字符串是否是回文*/#include int StrLen(char *str);int IsRevStr(char *str);int main(void){ char str1[] = "*1234321*"; char str2[] = "1234221"; if (IsRevStr(str1))转载 2012-11-10 10:26:00 · 6977 阅读 · 0 评论 -
goto 的使用注意点
使用goto不能跳过变量得初始化; 例子: …… goto test; int i; string str; test: { …… } …… 为什么这里通不过编译呢?把string str;这一句拿到goto之前就可以了? 为什么后面的int i;这一句不需要拿到goto之前呢?解答: 在c++ Primer中倒是提到,goto 不能向前跳过变量定义语句,给出的理由是可能原创 2015-10-30 11:44:19 · 3273 阅读 · 0 评论 -
ANSIC标准提供的预定义宏
ANSIC标准定义了以下6种可供C语言使用的预定义宏: __LINE__ 在源代码中插入当前源代码行号 __FILE__ 在源代码中插入当前源代码文件名 __DATE__ 在源代码中插入当翻译 2015-12-11 09:39:41 · 671 阅读 · 0 评论 -
C 语言中 setjmp 和 longjmp
摘自:http://www.cnblogs.com/hazir/p/c_setjmp_longjmp.html在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处;但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转。后面我们会看到这两个函数在处理异常上面的非常有用。setjmp 和 longjmp 使用方法我们都知道要转载 2017-07-17 19:17:49 · 359 阅读 · 0 评论 -
C++模板函数 学习记录
编译使用了模板函数的程序出错,提示模板函数 undefined reference … 找不到函数实现的错误信息 ? (注:模板函数声明和实现分别在 “.h” 和 “.cpp” 文件中。) 原因(摘自网络):这个并非编译器的BUG,这是编译器本身是故意这么实现的。模板类独立的cpp中的类型未知,所以不知道怎么分配内存等操作,因此无法编译生成出独立的目标文件。 解决方法: 1、模板函数(类)声明原创 2015-07-16 20:56:29 · 1029 阅读 · 0 评论 -
C语言开发 -- 怎样写参数个数可变的宏
目录(?)[-]用GCC和C99的可变参数宏 更方便地打印调试信息新的C99规范支持了可变参数的宏可变参数的宏里的操作说明怎样写参数个数可变的宏#if #ifdef #if defined 在 GNU C 中,宏可以接受可变数目的参数,就象函数一样,例如:#define pr_debug(fmt,arg...) /printk转载 2014-04-12 23:48:04 · 846 阅读 · 0 评论 -
C语言的指针数组与数组指针关系
首先要知道在C程序中指针就是地址。指针与数组之间有指针数组与数组指针两种:一:指针数组先分析下面的例子:typedef unsigned char U8; //定义U8来代替unsigned charU8 *point[2]; //定义一个指针一维数组其3个元素为unsigned char类型指针U8 *point[2]={&point[0],&point[1],转载 2012-11-09 14:05:57 · 1257 阅读 · 0 评论 -
mi_cmd_var_create: unable to create variable object 错误解
在windows下只需把你的project重新clean一下就可以参考来源:http://blog.csdn.net/yghk8888/article/details/6543946原创 2011-10-22 02:35:44 · 4048 阅读 · 0 评论 -
牛人们的博客
1、博主fudan_abc http://blog.csdn.net/fudan_abc2、 zhongrg的专栏 http://blog.chinaunix.net/link.php?url=http://blog.csdn.net%2Fzhongrg%2Farchive%2F2007%2F11%2F07%2F1872251.原创 2011-10-25 23:36:33 · 856 阅读 · 0 评论 -
代码中特殊的注释技术——TODO、FIXME和XXX的用处
备注:本文摘自https://blog.csdn.net/reille/article/details/7161942, https://blog.csdn.net/kl222/article/details/7323614,非常感谢博主的分享,本次转载仅用于学习记录,如有侵权请及时告知,本人会及时删除。前言:今天在阅读Qt Creator的源代码时,发现一些注释中有FIXME英文单词,用英文词...转载 2018-06-13 13:33:00 · 1655 阅读 · 0 评论 -
Visual C++编译错误:error C2220: 警告被视为错误 - 没有生成“object”文件
产生这种错误的原因是:原因是该文件使用的编码格式与当前系统对应的代码页格式不一样,例如原文件的代码页为unicode或utf-8,而我们系统中的代码页为中文gb2312-936。解决方案:(查看当前系统使用的代码页,使用cmd命令:chcp)1. 启动Microsoft Visual Studio,文件->打开->选择该cpp,然后在文件->高级保存选项->编码,选择当前系...原创 2018-05-06 22:19:45 · 8037 阅读 · 0 评论 -
C89标准和C99标准C11标准的区别
C99对C89的改变 1、增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。 如果某个函数定义了两个restr转载 2018-01-08 22:00:02 · 1361 阅读 · 0 评论 -
C/C++中空数组使用问题
在C/C++中结构体中使用空数组在一定使用环境下很有好处。 例如: typedef struct _NET_DATA3 { INT32 iLength; BYTE byType; BYTE byReserved; WORD wStreamId; DWORD dwChannelId; DWORD dwParam; DWORD原创 2015-11-12 10:25:09 · 2917 阅读 · 0 评论 -
C与C++的相互调用
在实际工作中可能经常要进行C和C++的混合编程,C++调用C语言的代码通常都比较容易,但也有一些细节需要注意。C要调用C++的代码就略为麻烦一些,因为C不支持面向对象的特征。首先我们来看一下C++调用C语言的代码。要让你的C代码既能被C代码又能被C++调用虽说容易,但是还是有需要注意的地方。现有三个文件分别如下:/* file TestC.h */#ifndef TESTC原创 2017-07-29 13:23:28 · 623 阅读 · 0 评论 -
C语言中的空指针、空指针常量、NULL & 0
什么是空指针常量(null pointer constant)?[6.3.2.3-3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.这里告诉我们:0、0L、'\0'、3 - 3转载 2012-11-09 14:03:17 · 1157 阅读 · 0 评论 -
标准C预处理器(指令)
标准C预处理器该文章借鉴一位老兄的文章,主要是取自PROGRAMMING IN ANSI c(Third Edition).什么是预处理器?答:预处理器是一个iechengxu,在源代码通过编译器之前,它先对源代码进行处理。它是在成为预处理器命令行或指令的控制下操作。预处理器指令放在源程序的main函数之前。在源代码通过编译器之前,由预处理器检查所有预处理指令。转载 2012-11-09 12:21:52 · 3605 阅读 · 0 评论 -
C99标准新特性
c99是在c89的基础上发展起来的,增加了基本数据类型,关键字 ,和一些系统函数等。 其实在初学阶段C89(ANSI C)和C99的区别是不易察觉的,所以不必太在意这个。 C99有一部分是对于大字符集的优化(很多资料上写的是ANSI标准化),还加入了一些数据库函数,是C89之后的标准,我们用的C是C89标准的,C++是C89编写的,目前的C99标准其实在以前的编译器中就或多或少的支持了转载 2012-11-09 14:12:27 · 1176 阅读 · 0 评论 -
C语言中的指针基础
指针的概念指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)int **ptr; (4)int (*pt转载 2012-11-09 14:04:35 · 764 阅读 · 0 评论 -
C语言中运算符优先级表
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .成转载 2012-11-09 13:10:13 · 755 阅读 · 0 评论 -
程序员编程修养
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。 我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。 2、积极向上的态度,有创造性思维。 3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,戒骄戒转载 2012-09-19 15:39:51 · 2679 阅读 · 0 评论 -
C语言中左值与右值
声明:本文转自 http://blog.csdn.net/qikaibinglan/article/details/6203483 如果有侵犯他人版权,请通知我我会马上删除 左值就是在赋值中可以放在赋值操作符两边的值,比如: int a = 1; double b = 2.0 a = b; b = a; 这里a和b都是左值,一切变量都是左值,但cons转载 2011-11-05 19:44:09 · 14781 阅读 · 2 评论 -
C语言中getchar()函数的理解
许多初学者都习惯用 char 型变量接收 getchar、getc,fgetc 等函数的返回值,其实这么做是不对的,并且隐含着足以致命的错误。getchar 等函数的返回值类型都是int 型下面是getchar()的定义:intgetchar (){ int result; _IO_acquire_lock (_IO_stdin); result = _IO_ge原创 2011-11-02 11:39:57 · 16655 阅读 · 0 评论 -
C语言中位段的使用
今天看Linux内核代码中定义设备模型中的基本数据结构kobject 遇到了C语言位段的使用 ,一开始看到蒙了,后才才知道C中有这玩意。。。。博主zhongrg中的一片博文讲的很不错http://blog.chinaunix.net/link.php?url=http://blog.csdn.net%2Fzhongrg%2Farchive%2F2007%2F11%2F07%2F187225转载 2011-10-27 22:32:18 · 892 阅读 · 0 评论 -
C语言开发 -- 调试技巧2
前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏开关:转载 2014-04-12 23:46:03 · 942 阅读 · 0 评论 -
C语言开发 -- 调试技巧1
在调试程序时,输出调试信息是一种普遍、有效的方法。输出调试信息一般有以下五种方法:方法一:直接使用屏幕打印函数printf。该方法直接在需要输出调试信息的位置使用函数printf输出相应的调试信息,以及某些关键变量的值。我们通过以下求阶层的函数fact来看看该方法的调试程序过程。 #include int fact(int n) { int i,f转载 2014-04-12 23:41:59 · 1242 阅读 · 0 评论 -
open("/dev/null",o_rdwr)作用
open("/dev/null",..)很多程序在一开始的时候要做这样的处理/* * make sure we have stdin/stdout/stderr reserved*/while((t = open("/dev/null",O_RDWR)) = 0)if(t >= 3) close(t)写入/dev/null的东西会被系统丢掉就像注释写的那转载 2012-04-16 09:19:30 · 8557 阅读 · 0 评论 -
syslog用法
函数:syslog() 功能:记录至系统记录。 头文件:#include 语法: int syslog(int priority, string message); 返回值: 整数 函数种类: 操作系统与环境 内容说明 : 本函数将 message 字符串写到系统纪录中,参数 priority转载 2012-04-15 22:42:43 · 3907 阅读 · 0 评论 -
strtok和strtok_r
strtok和strtok_r原型:char *strtok(char *s, char *delim);功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。说明:首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。 strtok在s中查找包含在delim中的字符并用NULL('/0')来替换,直到找遍整个字符转载 2012-04-16 22:39:51 · 1010 阅读 · 0 评论 -
getopt、getopt_long和getopt_long_only
如何分析命令行参数Sun, 2006-07-16 01:27 — MarchdayGNU/Linux的命令行选项有两种类型:短选项和长选项,前者以 '-' 作为前导符,后者以 '--' 作为前导符。比如有一个命令:$ myprog -a vv --add -b --file a.txt b.txt - -- -e c.txt在GNU/Linux系统,对这种情况的转载 2012-04-16 15:08:02 · 2922 阅读 · 0 评论 -
strdup函数的用法
函数名: strdup功 能: 将串拷贝到新建的位置处用 法: char *strdup(char *str); 这个函数在linux的man手册里解释为:The strdup() function returns a pointer toa new string which is aduplicate of the string s. Memo转载 2012-04-16 14:49:48 · 67853 阅读 · 4 评论