C语言
上帝-降临
这个作者很懒,什么都没留下…
展开
-
野指针
//一个造成“野指针”的典型例子unsigned char *Functions(void){ unsigned char Number = 0; //函数内的局部变量 unsigned char *p = &(Number); //指向该局部变量的指针 …… return p; //一个野指针诞生了}很多原因都可以造成“野指针”,对于初学者来说,如果试图采用背公式的方法记录下所转载 2015-03-03 17:07:44 · 520 阅读 · 0 评论 -
如何动态的建立大小可变的一维数组
动态创建可变大小的一维数组,其关键在于正确计算数组所需的空间大小。假设,我们要创建一个 float型的数组,该数组的大小由变量 n 来动态设定://动态创建一维数组float *pArr = (float)malloc(sizeof(float) * n);if (pArr == NULL) //检查空间是否分配成功{ //这里插入空间申请失败的处理代码}访问数组转载 2015-03-03 16:34:35 · 1028 阅读 · 0 评论 -
基本的优化规则
对代码进行优化处理时,需要考虑一些基本的优化规则:1.在代码优化之前,先要有一个同一代码的可靠的、非优化的版本。2.应利用算法优化措施,而不是通过提升系统特性来获取最大限度的性能提升。3.不要将代码优化与汇编语言实现混为一谈。4.在试图用汇编语言重写程序之前,先查看一下编译器生成的汇编代码并估算它的效率。5.如果编译器生成的汇编语言列表虽然显得很不错,但是程序运行起来仍然很慢,转载 2015-02-27 16:12:00 · 390 阅读 · 0 评论 -
基础的重要性(程序员之路)
学习编程有几年了,感觉走了不少弯路,而不少的学弟学妹又在重蹈我当初的覆辙,不免有些痛心。最近在网上也看了许多前辈们的经验建议,再结合自己的学习经历在这里谈谈基础的重要性,希望帮助大家少走些弯路。什么是基础呢?就是要把我们大学所学的离散数学,算法与数据结构,操作系统,计算机体系结构,编译原理等课程学好,对计算机的体系,CPU本身,操作系统内核,系统平台,面向对象编程,程序的性能等要有转载 2015-02-27 16:20:45 · 470 阅读 · 0 评论 -
指向函数的指针
指向函数的指针的一般形式为:类型声明符 (*指针变量名)();“类型声明符”表示被指函数的返回值的类型;“(*指针变量名)”表示 “*” 后面的变量是定义的指针变量;“()”表示指针变量所指的是一个函数。好处:提高程序的通用性和可适应性。C语言程序是由若干个函数组成的,每个函数在编译链接后总是占用一段连续的内存区,而函数名是该函数所占内存区的入口地址,每转载 2015-02-28 15:12:32 · 434 阅读 · 0 评论 -
指针概念综述
1.变量的地址就是变量的指针,用于存储地址的变量称为指针变量。当将一个变量的地址赋给某一个指针变量时,称这个指针变量指向该变量。此时,既可用变量名直接存取变量的值,也可用指针变量间接存取变量的值。2.C语言中的数组变量、字符串数组变量、字符串、结构体变量、共用体变量、枚举型变量,甚至函数名及函数的形参以及文件等都用指针,可用定义相应额指针变量存放这些指针。同样有两种方法存放变量的值:用变量名直转载 2015-02-28 16:31:47 · 426 阅读 · 0 评论 -
指针变量的定义
指针变量与一般变量的定义类似,形式如下:数据类型 [存储器类型1] * [存储器类型2] 标示符;[存储器类型1]表示被定义为基于存储器的指针,无此选项时,被定义为一般指针。这两种指针的区别在于它们的存储字节不同。一般指针在内存中占用3个字节,第一个字节存放该指针存储器类型的编码(在编译时由编译模式的默认值确定),第二个字节和第三个字节分别存放该指针的高位和低位地址偏移量。存储器类型的编码转载 2015-03-02 09:33:07 · 608 阅读 · 0 评论 -
如何动态的建立大小已知的二维数组(多维数组)
动态创建一个大小已知的二位数组, 首先, 我们需要利用 typedef 建立一个自定义类型。通过该类型我们可以描述二维数组的信息。假设我们要创建一个 4*10 的 int 型二维数组,则对应的代码为://建立自定义类型,描述而维数组信息typedef int ARRAY[4][10];接下来, 我们声明一个指向该类型二维数组的指针——也就是一个“指向数组的指针”:转载 2015-03-03 16:31:06 · 629 阅读 · 0 评论 -
地址绑定与“偷天换日”
指针的存储本质是 unsigned int 型变量。因此,我们可以将一个指针还原为普通变量,甚至可以将一个普通整型变量强行转换为一个指针:unsigned int Number = 0; //普通整型变量unsigned int *p = NULL; //普通指针p = (unsigned int *)Number; //青蛙变王子Number = (unsigned int转载 2015-03-03 16:51:52 · 337 阅读 · 0 评论 -
大端对齐与小端对齐
地址绑定技术,在概念上,等效于联合体 union,例如://联合体实现地址绑定union Example{ unsigned long dNumber; unsigned char Array[4];}Data;在这个联合体Example 中,unsigned long 型变量dNumebr 和unsigned char 型数组Array[]拥有同样的起始地址转载 2015-03-03 17:03:13 · 1547 阅读 · 0 评论 -
C语言函数
int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9')返回非0值,否则返回0int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0int iscntrl(int转载 2015-03-04 10:13:04 · 469 阅读 · 0 评论 -
C语言不经常用的东西
#undif这条预处理指令用于移除一个宏#运算符利用宏参数创建字符串##运算符把两个语言符号组合成单个语言符号...和__VA_ARGS__可变宏原创 2015-03-06 11:18:32 · 433 阅读 · 0 评论 -
printf()的标志
-左对齐+有符号的值若为正,则显示带加号的符号;若为负,则带减号的符号(空格)有符号的值若为正,则显示带前道空格(但是不显示符号);若为负,则带减号符号,+标志会覆盖空格标志#使用转换的可选形式。若为%o格式,则以0开始;若为%x或%X格式,则以0x或0X开始。对于所有的浮点形式,#标志了即使不跟如何数字,也打印一个小数点字符。对于%g和%G格式,它防止尾随零被删除。转载 2015-03-06 16:54:40 · 893 阅读 · 0 评论 -
如何绕过const限定, “偷天换日”修改这一本不应该被 修改的变量。
指针常量、全局变量、指针变量、不应该被修改的指针变量指针常量 = 普通整数强制转化为某一个类型的指针例如: ((unsigned int *)0x004B)全局变量 = (*(指针常量))如果试图采用这种方式强行将某一MemorySpace空间征用做(*((unsigned int *)0x004B))就是一个unsigned int型的变量,如果我们非要给这个变量加一转载 2015-03-03 16:48:24 · 645 阅读 · 0 评论 -
在 ICC 中如何正常的进行动态内存分配
在 ICC 中,我们是无法直接使用 C 语言基本库函数 malloc()和 free()进行动态内存分配和释放——即便包含了 C 语言标准库“ stdlib.h”也是一样。这是因为, 这里的动态内存分配是一种堆式分配。 为了节省空间开支, ICC没有为我们开辟默认的堆空间用于动态内存分配。使用这一功能,我们需要人工添加一个(或多个)堆。 在 ICC 提供的 C 语言标转载 2015-03-03 16:28:47 · 695 阅读 · 0 评论