
C/C++
wmlhust
Mail me maybe, wmlxhust@gmail.com
展开
-
C语言中,为什么字符串可以赋值给字符指针变量
一、C语言中,为什么字符串可以赋值给字符指针变量char *p,a='5';p=&a; //显然是正确的,p="abcd"; //但为什么也可以这样赋值??问:一直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点! 答:双引号做了3件事: 1.申请了空间(在常量区)转载 2014-12-17 20:13:33 · 1152 阅读 · 1 评论 -
字节序
刚看到转字节序的程序时十分不解。终于有一天搜了一下,弄懂啦。字节序,即字节在电脑中存放时的序列与输入(输出)时的序列,是先到的在前,还是后到的在前。 常见序:1. LE Little endian: 最符合人的思维的字节序,将低序字节存储在起始地址,地址低位存储值的低位,地址高位存储值的高位2. BE big-endian:最直观的字节序,地址低位存储值的原创 2014-12-02 16:32:54 · 547 阅读 · 0 评论 -
\r\n 与 \n 的前世今生
\r是回车符,\n是换行符 计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字原创 2014-12-02 16:33:27 · 479 阅读 · 0 评论 -
container_of 的的的原理
引言:再次做H3C项目,有感触,更有成长,这篇文章很好,很容易懂。。收藏了 源地址:http://www.embedu.org/Column/Column433.htm 另外一篇,同样精彩,http://blog.chinaunix.net/uid-20543672-id-3205315.html揭开linux内核中container_of的神原创 2014-12-02 16:34:35 · 847 阅读 · 0 评论 -
关于C里面 数字0,字符'0',字符串"0",字符串结尾标志符'\0'
首先对于字符,C语言里主要区分的依据是ascii编码表: 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大原创 2014-12-02 16:34:30 · 7704 阅读 · 0 评论 -
堆、栈、free
堆和栈的对比: 栈(操作系统):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。结构特点,先进先出。 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回原创 2014-12-02 16:33:24 · 869 阅读 · 0 评论 -
.c文件和.h文件的联系
.c文件就是C语言系列的源文件,而H文件则是C语言的头文件,即C系列中存放函数和全局变量的文件,因为C中的函数是被封装起来的,即无法看到其代码。 子程序不要定义在*.h中。函数定义要放在*.c中,而*.h只做声明.否则多引用几次,就会发生函数重复定义的错误。*.h只做声明,编译后不产生代码。这样做目的是为了实现软件的模块化,使软件结构清晰,而且也便于别人使用你写的程序。原创 2014-12-02 16:32:59 · 1655 阅读 · 0 评论 -
为什么不常见include .c文件
首先要指出的是: 对于#include ,编译器从标准库路径开始搜索 filename.h 对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h 今天有人问我: #include能不能include一个(多个.c文件)?偶的回答是:从理论上讲可以,但是不推荐。 为什么经常见到in原创 2014-12-02 16:32:57 · 945 阅读 · 0 评论 -
const char*, char const*, char*const的区别
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 事实上这个概念谁都有,只是三种声明方式非常相似很容易记混。 Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读。 char * const cp; ( * 读成 pointer to原创 2014-12-02 16:34:27 · 470 阅读 · 0 评论 -
linux下 C语言perror函数的作用
头文件 #include #include//注意 不可以掉了这个头文件,perror是包含在这个文件里的//编辑本段perror表头文件完善版定义函数 void perror(const char *s); perror ("open_port");函数说明 perror ( )用来将上一个函数发生错误的原因输出到标准设备(stde原创 2014-12-02 16:33:22 · 738 阅读 · 0 评论 -
windows C 与 linux C区别?
windows C库格式为 .dll( 动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件)。生成的*.exe 。 linux C 库格式为 .so(.so 为共享库 : 动态库(shared library/shared object/dynamic l...原创 2014-12-02 16:33:13 · 542 阅读 · 0 评论 -
#ifndef, #define, #endif 作用
#ifndef 它是if not define 的简写,是宏定义的一种,实际上确切的说,这应该是预处理功能三种(宏定义、文件包含、条件编译)中的一种----条件编译。 在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,多个c文件包含同一个h文件也不会报错。原创 2014-12-02 16:32:49 · 661 阅读 · 0 评论 -
C语言中函数strcpy ,strncpy ,strlcpy的用法
strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界。 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式。 1. strcpy strcpy 是依据 \0 作为结束判断的,如果 to 的空间不够,则会引起 buffer overflow。strcpy 常规的实原创 2014-12-02 16:33:30 · 760 阅读 · 0 评论