摘要: 先看这样的代码1voidMyNew(int*p)2{3 p=newint;4}56intmain()7{8int*p=NULL;9 MyNew(p);10}开始写了一篇:函数中分配内存的问题(点击进入),通过说明他们产生了拷贝,而导致p不能成功分配。但并未提出事实根据,下面我们来仔细看看具体原因。我... 阅读全文
posted @ 2012-07-17 21:02 山路水桥 阅读(199) 评论(0) 推荐(0) 编辑
摘要: c语言里有个很少用到的宏 #line,这个宏通常是和__LINE__宏一起使用的,__LINE__宏表示当前c语句在源文件中的行数,以前也只是在书上看到过,写过一些实例小程序,实际应用中并无使用。 好了,废话不说,举个例子来说明 #line宏的使用: 1:#include "iostream" 2:#line 100 3:using namespace std; 4: 5:int main(int argc, char* argv[]) 6:{ 7:cout<<"__LINE__:"<<__LINE__<<endl; 阅读全文
posted @ 2012-07-17 21:01 山路水桥 阅读(4918) 评论(1) 推荐(0) 编辑
摘要: 您正在看的C语言教程是:#pragma 预处理指令详解。在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Para其中Para 为参数,下面来看一些常用的参数。(1)message 参数。 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的 阅读全文
posted @ 2012-07-17 20:58 山路水桥 阅读(804) 评论(0) 推荐(0) 编辑
摘要: 一、预处理的由来:在C++的历史发展中,有很多的语言特征(特别是语言的晦涩之处)来自于C语言,预处理就是其中的一个。C++从C语言那里把C语言预处理器继承过来(C语言预处理器,被Bjarne博士简称为Cpp,不知道是不是C Program Preprocessor的简称)。二、常见的预处理功能:预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替换,最常见的预处理有:文件包含,条件编译、布局控制和宏替换4种。文件包含:#include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文。条件编译:#if,#ifndef,#ifdef,#endif,#undef等也是比较常见 阅读全文
posted @ 2012-07-17 20:54 山路水桥 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 其存储位置一般从右至左进行存储即:data: c(6bits) | b(2bits) | a(8bits).依编译器而定,TMS320的DSP的CCS按右至左的顺序。对于位域的定义尚有以下几点说明:0)位段成员的类型必须指定为unsigned int类型;1)一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始;2)由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位。3)位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的在某些机器上, 位段总是 阅读全文
posted @ 2012-07-17 20:13 山路水桥 阅读(3210) 评论(0) 推荐(0) 编辑
摘要: 听到好几个朋友说到去一些公司做面试,总是遇到关于大小端、位段(或者叫位域)和内存对齐的考题,然后就不知所措了。虽然我认为很多开发根本就用不到这个,但是我认为很有必要学习理解这些知识点,因为它可以让你更了解C++的,了解程序在内存的运行情况,也能加深对计算机系统的理解。声明:由于本文的代码会受到计算机环境的影响,故在此说明本篇博文中的程序的运行环境。 1、Microsoft Windows 7 Ultimate Edition Service Pack 1 (64bit 6.1.7601) 2、Microsoft Visual Studio 2010 Version 10.0.40219.1 S 阅读全文
posted @ 2012-07-17 20:06 山路水桥 阅读(374) 评论(0) 推荐(0) 编辑
摘要: //1.现有char a[10][20],回答下面表达式各代表的意义:a, a+1, a[1]+1, *a[1], *a, &a[1][1], &a[1] //a做左值时,类型就是char[10][20]; 做右值时退化为一个指针,其类型是char(*)[20] //a+1: 类型是char(*)[20],指向a[1], 所以a+1在值上与&a[1]相同 //a[1]+1:类型是char *; 指向a[1][1]; //*a[1]:类型是char, 相当于a[1][0]; //*a:类型为char[20], 退化为指针之后类型是int *, 指向a[0][0] //&a 阅读全文
posted @ 2012-07-17 20:04 山路水桥 阅读(95) 评论(0) 推荐(0) 编辑