Thinking in C
GAMELOFT9
读万卷书,行万里路,知行合一。
展开
-
uint8_t是什么类型
在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型啊!怎么又是u又是_t的?很多人有这样的疑问。论坛上就有人问:以*_t结尾的类型是不是都是long型的?在baidu上查一下,才找到答案,这时才发觉原来自己对C掌握的太少。那么_t的意思到底表示什么?具体的官方答案没有找到,不过我觉得有转载 2015-04-05 19:38:07 · 1550 阅读 · 0 评论 -
探索二维数组的动态分配
当我们定义一维数组的时候(以int数组为例),如果知道元素的个数,那么可以进行如下定义: int IntArray[5];或者int IntArray[]={1,2,3,4,5};//会自动计算出数组个数为5而事实上,我们经常不知道数组的元素个数,个数通常是作为变量传入的,如下:int count;count = xxx;int IntArray[count];如果直接用变量c原创 2015-10-08 09:45:37 · 760 阅读 · 0 评论 -
c语言return机制
0引C/C++中,函数内部的一切变量(函数内部局部变量,形参 )都是在其被调用时才被分配内存单元。子函数运行结束时,所有局部变量的内存单元会被系统释放。形参和函数内部的局部变量的生命期和作用域都是在函数内部( static变量的生命期除外)。在C中,函数被调用时的传参方式有两种形式:传值和传址。 传址的好处:(1)能在函数内部通过实参地址间接地改变实参的值。转载 2015-07-23 11:06:59 · 1351 阅读 · 0 评论 -
消除字符串空格
一、概述这是自己面试时碰到的一个题目,题目大意如下:去掉一个字符串的首尾空格,单词之间的空格,如果有多个则合并为一个,例如:“ i love china and i love you ”,则输出结果为:"i love china and i love you"。 先说一下自己的思路: 1、字符串首尾的空格比较容易,直接扫描一原创 2015-09-07 17:11:36 · 876 阅读 · 0 评论 -
一个字符串常量实验引发的思考
一、实验回顾先说明,这个问题对于计算机大神来说很easy,所以大神请绕道。 有这么一段程序(编译环境 vs 2013),如下:#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){ char a[] = "abc"; char b[] = "abc"; char* pstr1 = "abc"; char*原创 2015-08-29 16:48:10 · 714 阅读 · 0 评论 -
C/C++ 中struct嵌套的内存分配
一、概述 一直只知道非嵌套结构体的内存分配大小,却没想过如果结构体有嵌套怎么办?星期二参加360的笔试碰到了这样的题目,自然也就答不上来。今天编码试了下,得出了结论,在此记录下。这里主要探讨两点,非嵌套结构体的内存分配问题和结构体嵌套的内存分配问题。第一点是第二点的基础,所以我们先探讨非嵌套结构体的内存分配。二、非嵌套结构体 非嵌套结构体内存分配大致遵循两个原原创 2015-08-15 16:04:03 · 4004 阅读 · 4 评论 -
关于指针类型转换的一个有趣实验
一、概述前段时间碰到这么一个有趣的题目: int a = 0x1234abcd; char* b = (char*)(&a); printf("%d\n", *b); 请问输出的内容是什么?二、分析 题目大概的意思是,int类型的指针转换为char类型的指针后,会读取原来哪些内容。int类型是4个字节,char类型是1个字节,肯定只能读取一部分原创 2015-08-23 16:55:43 · 735 阅读 · 0 评论 -
c语言 单词计数
单词计数并不是什么难的内容,如果看了k&R的《C程序设计语言》,里面就有该功能的实现,先放上源码:#include "stdafx.h"#define IN 1 //在单词内#define OUT 0 //不在单词内int _tmain(int argc, _TCHAR* argv[]){ int state = OUT;//状态 int c; int count原创 2015-06-27 10:51:57 · 1717 阅读 · 0 评论 -
从sizeof算符看指针和字符数组的区别
一、概述一般情况下数组是可以当指针使用,两者区别不是很大。但是有的时候,就得好好区分两者关系。这里仅从sizeof算符来看看两者的区别。int _tmain(int argc, _TCHAR* argv[]){ char* str1 = "12345"; char str2[] = "12345"; char str3[5]; char* str4; char* str5 =原创 2015-06-27 14:47:24 · 746 阅读 · 1 评论 -
sizeof和strlen
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所转载 2015-06-25 11:16:26 · 508 阅读 · 0 评论 -
fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h
原文地址:http://blog.sina.com.cn/s/blog_58649eb30100th2k.html,略有改动。一、错误描述: 在VS2013的项目中添加了一个cpp文件,生成时报如下错误:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?二、错误分析:转载 2015-05-20 15:25:20 · 1520 阅读 · 0 评论 -
链接器工具错误 LNK2026 模块对于 SAFESEH 映像是不安全的
一、概述 今天用VS 2013打开一个之前VS2010下的一个c/c++项目,生成的时候报错:“LNK2026 模块对于 SAFESEH 映像是不安全的”。网上搜了一下,发现了解决方案:打开项目属性,在连接器----命令行---额外选项中填入如下语句:/SAFESEH:NO 保存后重新生成即可。至此,网上再无解释为什么要这么做。于是从错误LNK2026出发,在MSDN原创 2015-05-13 15:33:14 · 1321 阅读 · 0 评论 -
C语言中的static 详细分析
google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大。所以,我这篇博文博采众家之长,把互联网上的资料整合归类,并亲手编写程序验证之。 C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,转载 2015-04-07 21:43:47 · 615 阅读 · 0 评论 -
extern "C"的用法解析
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处转载 2015-04-07 21:18:03 · 465 阅读 · 0 评论 -
C语言的左移和右移探索
下面的左移和右移的探索都以int和unsigned int类型为例,先说明一下32位int和unsigned int各自的取值范围,其中int为:-2147483648 ~ 2147483647,unsigned int为:0~4294967295。int类型 先说左移,左移就是把一个数的所有位都向左移动若干位,在C中使用的是例子1:左移导致符号位被覆盖原创 2015-10-25 10:40:10 · 1382 阅读 · 0 评论