C专家编程

此书确实很有内容,记录一二。

第一章

(1)const char *类型可以被char *赋值,反之不可,因为编译器有规定,对于指针,赋值号左边的指针限定符可以包容右边的,反之不可。

所以对于strcpy这类函数而言,第二个参数的形参是const char *,而传递进去的实参是char *就没有问题,如果反过来就有问题了。其实把函数的形参设定为const char *就是为了防止在这个函数里修改那个指针所指向的字符串。

(2)int与unsigend int比较

int a[3]={1,2,3};
#define size (sizeof(a)/sizeof(a[0]))
main()
{
int i=-1;
if(i<size)
printf("hello");
}

上述代码是无法输出的,因为i会被升级成unsigned int,unsigned比signed要高一级。

所以,编程时,不要随便用unsigned,这么做意义不大,除了硬件编程时用于位操作。

时间: 2024-11-08 23:54:45

C专家编程的相关文章

C专家编程学习 1

1.C语言的基本数据类型直接与底层硬件相对应. 2#define 是可能出现问题 1 2 3 4 5 #define a(y) a_ex(y) a(x)被扩展为 a_ex(x) #define a (y) a_ex(y) a(x)被扩展为 (y) a_ex(y)(x) #define宏的用法 1.简单宏定义 1 #define a y 将文件中的 a 全部换成 y 为了避免出现问题,要将宏展开,根据运算符的优先级判断是否是需要的运算顺序. 2.带参数的宏定义 1 2 #define a(y) a

C专家编程 Expert C Programming

该书中一些思想还是比较有用的,但随着编译器以及规范的变化,书中有些内容已经发生了变化,以下是实践之后的一些总结. 1 - typedef int x[10] 和 define x int[10]  区别 define 定义为变量替换,而typedef为声明替换; #define peach int; unsigned peach i;  //wrong typedef int banana; unsigned banana i; //wrong 声明替换用typedef 识别数组和函数指针 e.

看书小记8(《C专家编程》)

int setjmp(jmp_buf env); void longjmp(jmp_buf env, int val); 系统跳转函数 ,可以直接在函数之间跳转 (比goto 强大多了) 将上下文 ,就是cpu和内存的信息保存到env中 ,然后调用 longjmp的时候跳转到使用env中的信息 ,恢复上下文 .如果是第一回调用setjmp 它会返回 0,如果从longjmp 跳转过来的 ,那就返回 longjmp的参数 val,根据setjmp的返回值, 我们就可以决定执行可能发生错误的代码还是

看书小记6(《C专家编程》)

typedef不常见但值得一提的用途: 1. 用typedef来定义与平台无关的类型. 比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为: typedef long double REAL; 在不支持 long double 的平台二上,改为: typedef double REAL; 在连 double 都不支持的平台三上,改为: typedef float REAL; 也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改. 标准库就

看书小记5(《C专家编程》)

函数指针 1. 函数与函数指针类型要匹配: 2. 函数指针用来保存函数首地址,即可以通过该指针访问函数: 3. 函数指针可以指向一类函数,而不是一个函数,即可以重新赋值. int maxNumber(int a, int b) { return a > b? a: b; } void fileFunc(){ cout<<"fileFunc"<<endl; } void editFunc(){ cout<<"editFunc"

《C专家编程》:如何用气压计测量建筑物的高度(附3)

<C专家编程>,看完该书,这本书详细地介绍了C语言中的难点和易错点.本来后面的不打算写了,但是仔细想想,觉得应该善始善终,所以不论好坏,只要对自己有帮助就够了,就坚持写完!发现附录还有一个非常有趣的故事.在此也就以它结束吧,开拓一下我们眼界,更新我们的三观.   轻松一下--如何用气压计测量建筑物的高度 有一个很早的故事,讲的是一位物理系学生寻找新奇的方法用气压计测量一幢建筑物的高度.Alexander Calandrain The Teaching of Elementary Science

《C专家编程》数组和指针并不同--多维数组

<C专家编程>数组和指针并不同 标签(空格分隔): 程序设计论著笔记 1. 背景理解 1.1 区分定义与声明 p83 声明相当于普通声明:它所说明的并非自身,而是描述其他地方创建的对象,声明可以多次出现: 定义相当于特殊声明:它可以为对象分配内存,只能出现在一个地方. 1.2 数组和指针的访问方式 左值和右值 ???????? X = Y ; 符号X的含义是X所代表的地址,这被称为左值,左值在编译时可知,左值表示存储结果的地方. 符号Y的含义是Y所代表的地址的内容,这被称为右值,右值直到运行时

看书小记9(《C专家编程》)

哈希表简单实现,练个手 #include "stdafx.h" #include <iostream> using namespace std; #define HASHSIZE 12 typedef struct HashTable { int *elem; int count; }HashTable; int m = 0; void Print(HashTable* h) { for (int i = 0; i < h->count; i++) { cout

看书小记7(《C专家编程》)

Cache是位于CPU寄存器与内存之间的存储器,它的容量比内存小但交换速度快. Cache的工作原理 1.读取顺序 当数据从内存读入时,整行的数据(16~32字节)被装入Cache,如果程序具有良好的地址引用局部性(顺序浏览一个字符串),那么CPU以后对邻近数据的引用就可以从快速的Cache读取,而不用从缓慢的内存读取.典型情况下,主存的存取速度可能只有Cache的四分之一. CPU要读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理:如果没有找到,就用相对慢的速度从内存

《C专家编程》读书笔记

<C专家编程>读书笔记 C语言的设计哲学: 一切工作程序员自己负责. 语言中的所有特性都不需要隐式的运行时支持. 程序员所做的都是对的. 程序员应该知道自己在干什么,并保证自己的所作所为是正确的. --第1章-- C: 穿越时空的迷雾 小即是美.事物发展都有个过程,由简入繁,不能一开始就想得太复杂,Multics, IBM的OS/360都是因此而失败. C语言的许多特性是为了方便编译器设计者而建立的.----唉,怎么这个样子 C语言的基本数据类型直接与底层硬件相对应.----确实如此 regi