C/C++
文章平均质量分 72
3w
这个作者很懒,什么都没留下…
展开
-
字符串拷贝函数
这次面试腾讯,面试官要我写个字符串拷贝函数,头一天晚上一晚上没睡好,脑袋昏昏沉沉的,之前看过C++中的字符串拷贝构造函数,先入为主,也没多想就开始了String类的拷贝构造函数,写完之后,将结果给面试官看,面试官说有几个问题,说怎么用这么长时间,然后我检查问题所在,第一个是字符串拷贝后,最后没有添加'/0',因为循环判断的条件是!='/0',所以很明显没有这个,将导致严重的安全问题,产生越界和内存非法访问问题。问题在于C语言中对字符串的读取是直到找到第一个'/0'才结束。虽然马上发现了,但是明显这是平原创 2011-05-10 18:37:00 · 3504 阅读 · 0 评论 -
函数中的临时对象
#include "stdafx.h"#include using namespace std; class Internet;Internet * pa;Internet * pb;class Internet { public: Internet() { cout } Internet(char *name,char *address) { cout strcpy(Internet::name,name);原创 2011-05-02 22:21:00 · 568 阅读 · 0 评论 -
二维数组解析
当我们写下int a[3][4]; 的时候,我不知道有多少学C语言的具体明白这个数组背后隐藏的东西。 a代表什么,&a代表什么,a[0]代表什么等等。 我们暂且放弃我们脑海中C语言老师传授给我们的那些教条概念:“a是二维数组名,表示二维数组第一个元素的地址...” 假设我们根本就没有接触过二维数组。当然我们至少得知道一维数组的知识。 我们采用从右到左的识别变量原创 2011-06-25 21:37:00 · 1779 阅读 · 0 评论 -
C99中的restrict关键字
今天读APUE,看到某个函数原型的声明: int stat ( const char * restrict pathname,struct stat * restrict buf);这里的restrict让我觉得有些疑惑,一查原来是C99中增加的关键字那么restrict的意义是什么呢?O转载 2011-06-27 14:18:00 · 915 阅读 · 0 评论 -
从底层汇编理解 c++ 引用实现机制
引用类型到底是什么?它和指针有什么关系?它本身占用内存空间吗? 带着这些疑问,我们来进行分析。 先看代码:#include #include using namespace std;void main(){ int x = 1; i原创 2011-09-01 16:17:09 · 10511 阅读 · 11 评论 -
百度面试题 c++ 实现引用类型与被引用的对象分离的一种方法
这个问题想了很久,一般情况下,一个引用变量一旦指定被引用变量后,是不能作为另一个变量的引用的,这也是为什么人家喜欢将引用与int * const p 等价的原因,即引用和指针常量有相同的性质,所以p不能指向其他对象,而且p必须在定义的时候初始化,这和引用性质一样。 其实通过原创 2011-09-01 20:29:05 · 1766 阅读 · 6 评论 -
指针数组
不知道你是否用到了指针数组,C语言中使用指针数组是一种常用的编程技巧/*=====================================本程序是为了学习而使用的的测试程序,用来说明C语言中的一些学习误区,对C语言的某些知识作详细的讲解========转载 2011-08-05 16:13:35 · 508 阅读 · 0 评论 -
一维或多维数组作为函数参数的问题
C语言中的多维数组是不能完全做为参数来使用的,因为它是受限制的:/*=====================================本程序是为了学习而使用的的测试程序,用来说明C语言中的一些学习误区,对C语言的某些知识作详细的讲解==========转载 2011-08-05 16:23:22 · 1015 阅读 · 0 评论 -
C语言中的多维数组
2006-12-27 17:53 439人阅读 评论(1)收藏 举报这个系列的文章主要是讲一些C语言的语法中比较模糊的问题,和一些常用的语言技巧.首先声明的是:对于C语言语法和语言技巧的讲解,我将以源码的形式给出,这些 都是C语言中比较基础,实用而且是重要转载 2011-08-05 16:31:53 · 1087 阅读 · 0 评论 -
"烫"手芋头——字符串处理中出现的问题
为什么我们有时候在进行字符串处理的问题中,当我们输出字符串的值的时候,或者我们调试程序查看字符串变量的值的时候,会出现"烫"和"屯:等怪异的中文字符,其实这个问题的往往是由于要访问的地址的内容字符未被初始化,或者我们访问了非法内存。 未初始化的变量会被系统赋初值为0xCC,超过了ASCII码0-127这个范围,因此这个"字符串"被系统当成了宽字符组成的字符串,即两个字节数据组成一个字符,而0xCCCC表示的宽字符正好是乱码中的那个"烫"字。"屯"字也是一样的原因。 <br />原创 2011-05-01 10:50:00 · 1369 阅读 · 0 评论 -
#ifndef __cplusplus的意思?
今天师弟问我C语言下怎么没有max函数,我记得是有max宏的,直接写这个宏的话,编译会出现没有定义的错误,问题应该是没有包含该宏定义的头文件,头文件为stdlib.h,奇怪的是包含该头文件后,编译还是出错,我所有的开发工具是VC6.0.我定位到该宏所在的头文件代码,代码如下: 1: #ifndef __cplusplus 2: #define max(a,b)原创 2011-06-22 20:49:00 · 4125 阅读 · 0 评论 -
"显微镜"下细看字符串常量初始化数组和指针
先看代码: 1: #include "stdafx.h" 2: #include 3: 4: using namespace std; 5: 6: int main(int argc, char** argv) 7: { 8: char * p = "ABCD"; 9: cha原创 2011-05-15 16:59:00 · 1554 阅读 · 2 评论 -
C++中的位域详解
位域有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:struct 位域结构名{ 位域转载 2011-05-16 14:00:00 · 2598 阅读 · 0 评论 -
VC编译器下多个i++,++i的相加
1: #include "stdafx.h" 2: 3: int main(int argc, char** argv) 4: { 5: 6: int i = 1; 7: int j = (++i)+(++i)+(++i); 8: return 0; 9: }.csharp原创 2011-05-17 10:19:00 · 1059 阅读 · 0 评论 -
字符常量与转义字符
一、字符常量 2-4 转义字符表 字符常量是用单引号括起来的字符。 单引号括起来的字符有两种表示方法: 一种是用该字符的图形符号,如'b' ,'y','*'。 另外还可以用字符的ASCII码表示,即用反斜符(/)开头,后跟字符的ASCII码,这种方法也称为转义序列表示法,具体方法是:有两种形式: 一种是用字符的八进制ASCII码,表示为:/ddd这里,ddd是八进制值。 另一种使用字符的十六进制ASCII码值,表示为 /xhh 这里hh是两位十六进制值。 如:'A' ,'/原创 2011-05-23 18:29:00 · 7140 阅读 · 1 评论 -
Difference between "/0" and '/0' and '0' and 0
To me, when doing C/C++: 0 would digit zero, that is, a numerical value. '0' could be the character capital oh or the character zero. For example: char word[10] = "Oxford"; char number[10] = "01234"; Depending on typeface used 'O' may look ex原创 2011-05-23 18:52:00 · 625 阅读 · 0 评论 -
详解malloc与free函数
作者:hyuan 日期:2010-8-9 7:25:00 malloc函数具体实现: 以下是在linux2.6.14源码中找到的malloc函数实现 linux-2.6.14/arch/i386/boot/compressed/misc.c 源文件:http://lxr.linux.no/linux+v2.6.14/arch/i386/boot/compressed/misc.c 33 static void* memset(void *, int, size_t); 34原创 2011-05-22 23:59:00 · 1068 阅读 · 0 评论 -
怎么访问一个整型数里面的各个字节
刚刚在讨论字节序的问题的时候出现了这么一个问题,怎么访问一个整型变量里面的各个字节,我们知道如果要访问这个整型最低地址一个字节的数据的话,可以通过如下方式: char a = *(char*)&整型变量名; 这里先将整型数通过取地址符号获得变量的开始的地址,为什么要(char*)进行强制类型转换呢,因为对于整型数据的话,表示的就是以首地址开始的4个字节,它是一个整体,取它的地址后,地址对应的类型为int*类型,即如果通过这个指针访问原创 2011-05-25 20:50:00 · 3883 阅读 · 2 评论 -
VC软件开发规范(参数、返回值以及函数内部实现规则)
4.1 参数的规则 ☆ 【规则4.1-1】 参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字,如果函数没有参数,则用void填充;例如: void SetValue(int nWidth, int nHeight); // 良好的风格 void SetValue(int, int); // 不良的风格 float GetValue(void); // 良好的风格 float GetValue();原创 2011-05-30 12:01:00 · 2015 阅读 · 2 评论 -
关于BSS段与DATA段的区别
分类: 嵌入式驱动开发 通过小代码体验程序中BSS段和DATA的差异BSS(Block Started by Symbol)用来存储未初始化的全局变量和静态变量,全局变量或静态变量值为0或NULL(对于指针变量而言)的通常会被编译器认为未初始化,属于静态内存分配区,不会占用程序文件空间,不存储这些变量在外存上,但是还是会占用一部分空间,这些空间用来标识未转载 2011-06-08 17:45:00 · 3239 阅读 · 1 评论 -
谈谈sizeof这个运算符(union+struct+数组)
谈谈sizeof这个运算符我们在C编程的时候经常要用到sizeof,特别是在考试的时候,这往往是一个必考的知识点。下面,我就我在编程中的理解,浅谈一下sizeof的一些问题,让朋友们在遇到它的时候,知道它到底是怎么一回事。不过在讲之前,先熟悉一下这个公式。A % ( min(B,C) ) == 0 /*此公式不是我总结的,但文章是我根据这个公式写的*/A:变转载 2012-02-26 15:10:54 · 1239 阅读 · 0 评论