c语言
若水三千你是一千
这个作者很懒,什么都没留下…
展开
-
int 型 char 型的转换问题
在内存中, char 型是以一个字节八位二进制数保存的,int型是4个字节,32位二进制数保存的,当(int)char 时,赋予int型在32位的最后八位char 的二进制数,剩余的24位不做处理既为0 当(char)int 时,由于char 型只能是八位,而int型的32位放不下便会截断,丢失精度。 比如 int a=542;char ch=(char)a;printf("%d",ch)原创 2012-12-05 12:10:23 · 1490 阅读 · 0 评论 -
C关键字之 volatile
就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。volatile的作用volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且转载 2013-02-21 16:09:32 · 1083 阅读 · 0 评论 -
C 语言四大存储类型。。。
1。 extern, 从其英文意思外部的就能看出,这个表示引用一个外部变量。。 C语言程序编译时是以每个.c 文件为单位的,最后再把它们链接在一起,所以每个文件中的全局变量对于其他文件是可见的,所以可以在一个文件中引用其他文件中的变量和函数。 extern 关键字就是用来表示引用别的单元的变量。。。 比如。。file1.c 中原创 2013-02-22 18:45:43 · 2920 阅读 · 0 评论 -
字符串常量到底存放在哪个存储区
字符串常量,放在哪个存储区呢?是“自动存储区”还是“静态存储区”中?比如:char *pstr="hello world!";这里,"hello world!"是一个字符串常量,pstr是在栈中的变量。我想问,字符串常量,在哪个内存区域分配空间呢?好像应该不是在“栈区“分配空间吧!!!一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内转载 2013-02-23 16:57:57 · 55012 阅读 · 26 评论 -
C 语言main 函数终极探秘
所有的C程序必须定义一个称之为main的外部函数,这个函数是程序的入口,也就是当程序启动时所执行的第一个函数,当这个函数返回时,程序也将终止,并且这个函数的返回值被看成是程序成功或失败的标志,如果在到达main函数体的末尾时没有遇到返回语句 ,它就被看看成是执行了return 0; 语句。 C的设计原则是把函数作为程序的构成模块。main()函数称之为主函数,一个C程序总是从ma原创 2013-02-13 11:56:31 · 9335 阅读 · 1 评论 -
C语言实现关机
许多学习刚学习C语言的朋友对感觉C语言只是printf("hello world\n"); 或者数学问题,总想做个关机等的小程序,其实,C语言实现关机是很容易的,下面是代码 #include int main(void) { system("shutdown -s -t 0"); return 0;原创 2013-02-28 19:46:27 · 24271 阅读 · 3 评论 -
C语言15大头文件介绍
C89(标准C) 有15个头文件 ,这些头文件包含了标准库的函数的声明 1. assert.h /* assert.h assert macro Copyright (c) 1987, 1991 by Borland International All Rights Reserved.*/#if !defined( __DEFS_H原创 2013-02-28 16:42:44 · 4493 阅读 · 0 评论 -
类型的定义与申明
变量的声明有两种情况: (1) 一种是需要建立存储空间的(定义、声明)。例如:int a在声明的时候就已经建立了存储空间。 (2) 另一种是不需要建立存储空间的(声明)。例如:extern int a其中变量a是在别的文件中定义的。 前者是"定义性声明(defining declaration)"或者称为"定义(definition)",而后者是"引用性声明(ref原创 2013-02-28 11:28:57 · 2334 阅读 · 0 评论 -
C语言32大关键字
所谓关键字也叫保留字,它是标识符的一种,标准规定它是编译器默认的某些类型,因此用户不可用它的一样的标识符去表示其他的东西。 标准C有32个关键字: 一 数据类型关键字 12 个: 1 . char 2 . short 3 . int 4 . long 5. enum 6. float 7. double 8. s原创 2013-02-28 11:00:41 · 1070 阅读 · 0 评论 -
cl.exe 介绍
CL.exe 是控制 Microsoft C 和 C++ 编译器与链接器的 32 位工具。编译器产生通用对象文件格式 (COFF) 对象 (.obj) 文件。链接器产生可执行文件 (.exe) 或动态链接库文件 (DLL)。注意,所有编译器选项都区分大小写。若要编译但不链接,请使用 /c。使用 NMAKE 生成输出文件。使用 BSCMAKE 支持类浏览。以下是一个完整的编译器选原创 2013-08-19 11:42:54 · 3942 阅读 · 0 评论 -
_beginthread和CreateThread 创建线程
建立一个线程。unsigned long beginthread(void(cdecl *startaddress)(void*),unsigned stacksize, void *arglist);unsigne dlong beginthreadex(void *security,unsignedstacksize,unsigned(stdcall *startaddre转载 2013-12-08 11:58:57 · 2992 阅读 · 0 评论 -
crt0.c代码内容解释和编译器构造
下面用红色字体,做部分解释: 1/**//*** 2*crt0.c - C runtime initialization routine 3* 4* Copyright (c) 1989-1997, Microsoft Corporation. All rights reserved. 5* 6*Purpose: 7* Th转载 2013-12-03 21:58:43 · 5028 阅读 · 0 评论 -
深入 char * ,char ** ,char a[ ] ,char *a[] 内核
C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个。。。下面就开始剖析一下这两位的恩怨情仇。。。 1 数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。。 2 指针。 指针原创 2013-02-23 15:34:13 · 198950 阅读 · 86 评论 -
C语言文件操作之fgets()
来说一说fgets(..)函数。 原型 char * fgets(char * s, int n,FILE *stream); 参数: s: 字符型指针,指向存储读入数据的缓冲区的地址。 n: 从流中读入n-1个字符 stream : 指向读取的流。 返回值: 1. 当n原创 2013-01-25 11:57:00 · 255651 阅读 · 21 评论 -
stdafx.h 头文件概述
stdafx,的英文全称为:Standard Application Framework Extensions所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。预编译头文件通过编译stdafx.cpp生成,以工原创 2013-02-11 19:00:30 · 1503 阅读 · 0 评论 -
C/C++程序编译运行生成过程分析
C/C++程序编译步骤 如何生成可执行文件 **************************************************************************篇一****************************************************************************************转载 2013-02-13 10:23:29 · 6007 阅读 · 0 评论 -
C语言宏定义
1、为什么要有宏定义? 代码中某个特定数值需要参与运算,而且该数值作用于多个地方,当需要对该数值进行修改时,希望只改动一个地方就能实现该数值的全部更新;即便某个数值只用到一次,当修改时也会面临搜索阅读大量代码、数值含义不明晰的问题;某些“操作块”封装成函数时,调用函数开销(保存上下文环境、参数调用、堆栈分配等)太大影响效率,不封装则需要多次输入相同的“操作块”内容,并且修改麻烦容转载 2012-12-05 13:11:28 · 918 阅读 · 0 评论 -
C语言宏的定义2
1、如何区分宏定义中的“宏名称”和“宏字符串”?对于带参数的宏又该注意什么? 在宏定义中,“宏名称”和“宏字符串”是通过“空格”来区分的。编译器在处理时宏定义时,首先从“#define”后第一个空格开始读取字符串,直到遇见下一个空格为止,两个空格之间的字符串为“宏名称”,确定好“宏名称”之后,本行的所有其他字符串都为“宏字符串”。图示:#define + N个空格(1转载 2012-12-05 13:07:30 · 838 阅读 · 0 评论 -
C 语言 switch 语句
在有多个选择分支条件的情况下,用if 语句难免会繁琐且效率不高,此时便是switch语言的用武之地。 int i=1; switch(i){ case 0: printf("0"); case 1: printf("1"); case 2: printf("2"原创 2012-12-14 16:27:02 · 42537 阅读 · 5 评论 -
C语言输入输出函数之 fputs(...)
C语言中fgets(...)从流中读入输入,相反fputs(...)向文件写入数据。 对于ANSI C 程序,运行时系统会打开至少三个流,这3个流包括: 1. 标准输入 standard input . 标准定义为stdin. 2 标准输出 standard output. 标准定义为stdout 3. 标准原创 2013-01-25 18:33:14 · 31269 阅读 · 0 评论 -
float 精度探究
最近一段时间看到版上关于C++里浮点变量精度的讨论比较多,那么我就给对这个问题有疑惑的人详细的讲解一下intel的处理器上是如何处理浮点数的。为了能更方便的讲解,我在这里只以float型为例,从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以dou转载 2013-02-04 09:55:44 · 1367 阅读 · 0 评论 -
C99概述
C99是什么C99是标准ISO/IEC 9899:1999的简称。c99是在c89的基础上发展起来的,增加了基本数据类型,关键字和一些系统函数等。其实在初学阶段C89(ANSI C)和C99的区别是不易察觉的,所以不必太在意这个。C99有一部分是对于大字符集的优化(很多资料上写的是ANSI标准化),还加入了一些数据库函数,是C89之后的标准,我们用的C是C89标准的,C转载 2013-02-11 16:37:39 · 9369 阅读 · 0 评论 -
C运行时库浅析
运行时和运行时库 (摘录)Runtime: When a program is running, or executing, it is said to be in runtime. The term is mostly used by software developers to specify when errors in a program occur. A "runti转载 2013-02-11 18:00:31 · 1069 阅读 · 0 评论 -
C运行时库
1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritchie 和 Brian Kernighan 就用 C 本身重写了 90% 以上的 UNIX转载 2013-02-11 17:58:52 · 640 阅读 · 0 评论 -
C语言内存管理分析
欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言:640K ought to be enough for everybody— Bill Gates 1981程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。7转载 2013-02-11 19:33:34 · 948 阅读 · 0 评论 -
VC++中的C运行时库浅析
1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个时期的C运行时库都是单线程的。 随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使用了多个全局变量(例如errno)和转载 2013-02-13 10:13:03 · 2368 阅读 · 0 评论 -
优秀程序员不得不知道的20个位运算技巧
【转载】一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《编程之美》求“1的数目”时,我才开始觉得位运算是如此之美,后来读到 《Hacker's Delight》,感慨到Henry S.Warren把位运算运用的如此神出鬼没,很多程序都十分精妙,我转载 2013-02-10 23:21:51 · 2620 阅读 · 0 评论 -
C99与C89对比
GCC 支持C99,通过 --std = c99命令行参数开启。 例如:gcc --std = c99 test.c 1、增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量转载 2013-02-11 17:22:45 · 1338 阅读 · 0 评论 -
浅析为什么char类型的范围是 —128~+127
在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗: -2^(n-1)~2^(n-1)-1 n为整型的内存占用位数,所以int类型32位 那么就是 -(2^31)~2^31 -1 即 -21474原创 2013-02-07 13:44:29 · 67502 阅读 · 60 评论