笔记——【C和指针】
来源:互联网 发布:java 读取tar.gz 编辑:程序博客网 时间:2024/06/01 10:29
1、函数指针数组
P264
double add1(double, double); double add2(double, double); double add3(double, double); double add4(double, double); double (* fun[])(double, double) = //fun[]是一个数组,其中存放的是函数指针。 { add1, add2, add3, add4 }; result = fun[i](op1,op2); //调用函数指针
2、字符串常量
P270
字符串常量出现于一个表达式中时,它的值是一个指针常量,指向第一个字符。
“xyz” + 1 == ‘y’
putchar(“0123456789ABCDEF”[value % 16]); //用来打印value对应的十六进制数
strcpy("hello\n","bye\n"); printf("hello\n"); //将打印出bye
3、\40 \x40表示
\40 = 32 = 空格字符
\x40 = \100 000 = 64 = ‘@’
4、相同长度的无符号变量和有符号变量容纳的值谁大?
P48
一样。数在内存里都是以二进制存储的,只有在输出才分有符号和无符号。
而相同长度的int和float,int的精度更大。因为,浮点数有多种表示形式,float能表示的不同值的数量比int少。
5、指针比较大小
char string[STRING_SIZE]; char *p = &string[0]; char *q = &string[用for循环找到最后一个元素]; while(p < q)
6、指针与数组
P168
一个文件中:
int a[10]; int *b = a;
另一个文件:
extern int *a; extern int b[]; int x,y; x = a[3]; y = b[3];
解释
7、数字转换为单词形式
P139
题目如下:
编写函数void written_amount(unsigned int amount,char *buffer);
它把amount表示的值转换为单词形式,并储存于buffer中。这个函数可以在一个打印支票的程序中使用。例如,如果amount的值是16312,那么buffer中存储的字符串应该是
SIXTEEN THOUSAND THREE HUNDRED TWELVE
有些值可以用两种不同的方法进行打印,例如,1200可以是ONE THOUSAND TWO HUNDRED或TWELVE HUNDRED。你可以选择一种你喜欢的模式。
8、联合的初始化
P213
初始值必须是联合第一个成员的类型,而且必须位于一对花括号里面。
union { int a; float b; char c[4]; }x = {5}; //把x.a初始化为5
9、结构体与地址
P215 T7
typedef struct NODE{ int a; struct NODE * b; struct NODE * c;};struct NODE nodes[5] ={ {5, nodes+3, NULL}, {15, nodes+4, nodes+3}, {22, NULL, nodes+4}, {12, nodes+1, nodes}, {18, nodes+2, nodes+1}}
nodes数组起始位置为200,整数和指针长度为4字节。
nodes[3].b->b 等价于:nodes[1].b == nodes+2 = 200 + 2*sizeof(NODE) = 200 + 2 * 12;
&nodes[3].a 等价于nodes[3]的起始地址,200 + 3*sizeof(NODE) = 200 + 3 * 12;
&nodes[3].c 等价于nodes[3]的起始位置偏移一个整形+一个NODE型指针的大小。
10、用位运算代替位段
P216 T11
struct { int a:4; int b:8; int c:3; int d:1;}x;x.a = aaa;x.b = bbb;x.c = ccc;x.d = ddd;
首先定义一个整数int x
x &= 0x0FFF; //将需要设置的高4位先清零 x = (aaa & 0xF) << 12; //只获取aaa的低4位值,高于4位的都遗弃。
11、动态内存分配
当你一次请求500个字节的内存时,你实际获得的动态分配的内存数量总共有多大?
当你一次请求分配5000个字节又如何?它们有区别么?如果有,如何解释?
分析:分配内存是按4的倍数来分配的,这样有利于提高内存的读取速度,因为cpu是32位的话,一次可读取的内存就是32位,也就是4字节.如果你分配的内存不是4的倍数的时候,会比实际要求的多.
12
- 笔记——【C和指针】
- C笔记1—指针和数组
- 《c和指针》笔记
- C和指针笔记
- 《C和指针》笔记
- c 和 指针(笔记)
- C和指针笔记
- 《C和指针》笔记
- 《C和指针》笔记
- C和指针笔记
- C和指针——输入输出函数笔记
- C和指针 学习笔记——第三章 数据
- C++primer学习笔记——引用和指针
- C和指针 学习笔记—第1-2章
- C和指针 学习笔记—第3章
- 【C和指针】第1—2章学习笔记
- C和指针读书笔记——指针
- 《c和指针》摘录4—指针
- 小白用advanced installer建安装包
- n*m 矩阵: set matrix zeroes
- WebDriver 常用获取测试对象的状态
- NSStringDrawingOptions
- 一维 数组
- 笔记——【C和指针】
- 备份数据库的定时任务
- 浅谈测试驱动开发TDD技术
- fopen打开文件失败
- 如何在HiWork中创建新频道及加入已有频道
- LeetCode 之 Sqrt(x) — C 实现
- Java设计模式 模板方法(Template Method)
- Thrift 线程池
- SQL语句大全(基础)