K&R阅读笔记——指针

地址运算符&只能应用于内存中的对象,即变量和数组元素。他不能作用于表达式,常量和register类型的变量。

*ip++ 和 (*ip)++的区别,前者将指针ip本身指向下一个元素,而后者将ip指向的内容加1,因为一元运算符*和++,优先级相同,但是结合顺序是自右向左。

对于:int a[10]

  &a 的类型为int (*)[10],是一位数组,而a的类型为int *类型。所以注意不要搞错。

  int *p = a;是可以的。

  int *p = &a[0];也是可以的

  &a[i]和a+i的含义是相同的。

  但要注意:数组名是常量,而指针是变量。可以对指针进行算数运算,但是对数组名是不可以进行算数运算的。

  对指针进行算数运算的含义是:取其前后的若干个相同类型的元素。

char string[] = "hello world!"

char *string2 = "hello world!"

两者有着很大的区别,string在内存中开辟了一个数组来存放字符串,可以进行修改;而string2只是一个指针,指向了常量字符串,如果试图修改其内容,结果是没有定义的。

对于二维数组:int a[3][4]

如果想在函数中作为参数传入二维数组,则函数应该写为;

void fun(int a[3][4]);void fun(int a[][4]);或者void fun(int (*a)[4]);

命令行参数void main(int argc, char *argv[]);

  argv[0][1],**argv第一个字符串的第一个字符

  argv[1][1],(*argv)[1], *(*argv+1)第一个字符串的第一个字符

在后续的学习中注意弄清楚;二维数组和指针数组,及指向指针的指针之间的关系。int *p[13]和int (*p)[13]在引用和赋值时候的区别是什么?

时间: 2024-10-26 12:05:14

K&R阅读笔记——指针的相关文章

K&R 学习笔记 第一章

今天开始学习C语言,为了之后的游戏开发学习做好基础,其实在大一的时候学校有C语言的课程,学的马马虎虎,教学也比较浅显,感觉并不能学习到C语言的精髓.在经过多人推荐下,入手了K&R ,看了第一章之后,才发现的确值得这么多人称赞. 其实大多数书的第一章都是差不多的,以Hello World 引出本书学习的知识体系的顺序,有趣的是之后的练习,也是要花一番功夫的. 1.4 提到了幻数,所谓幻数,就是在程序中直接使用的数字.C语言的传统方式是使用#define行来对付幻数.C语言预处理程序是一个强有力的工

C程序设计语言(K&R) 笔记2

(1) #include <stdio.h> main(){ int c; while((c = getchar()) != EOF){ putchar(c); } } 注意,因为 != 的优先级比 赋值= 的优先级高.如果改为 while(c = getchar() != EOF) c被赋值为0或1 将会出现错误输出: (2)计数 #include <stdio.h> main(){ long count=0; while(getchar() != 'q'){ ++count;

C程序设计语言(K&amp;R) 笔记1

当作复习... (1)将华氏度 换算成 摄氏度,公式: ℃=(5/9)(?°F-32) #include <stdio.h> int transformTemprature(int F){ //`C=(5/9)(?`F-32) return (int)(5 * (F-32) / 9); } int main(){ int lower = 0; int upper = 300; int step = 20; for(int f=lower; f<=upper; f+=step){ prin

《C专家编程》笔记(一)——C语言的历史、K&amp;R C和ANSI C

1. C语言的许多特性是为了方便编译器设计者而建立的.于是C语言的语言特性有:数组下标从0而非1开始:C语言的基本数据类型直接与底层硬件相对应:auto关键字只对创建符号表入口的编译器设计者有意义:表达式中的数组名可以看作是指针:float被自动扩展为double(ANSI C中不再如此):不允许嵌套函数(简化了编译器):register关键字,为编译器设计者提供线索,却把包袱丢给了程序员. 2. C编译器不曾实现的一些功能必须通过其他途径实现(编译器实现的功能,如加减乘除.指针.取地址).在C

《STL源码剖析》---stl_tree.h阅读笔记

STL中,关联式容器的内部结构是一颗平衡二叉树,以便获得良好的搜索效率.红黑树是平衡二叉树的一种,它不像AVL树那样要求绝对平衡,降低了对旋转的要求,但是其性能并没有下降很多,它的搜索.插入.删除都能以O(nlogn)时间完成.平衡可以在一次或者两次旋转解决,是"性价比"很高的平衡二叉树. RB-tree(red black tree)红黑树是平衡二叉树.它满足一下规则 (1)每个节点不是红色就是黑色. (2)根节点是黑色. (3)如果节点为红色,则其子节点比为黑色. (4)任何一个节

《STL源码剖析》---stl_hashtable.h阅读笔记

在前面介绍的RB-tree红黑树中,可以看出红黑树的插入.查找.删除的平均时间复杂度为O(nlogn).但这是基于一个假设:输入数据具有随机性.而哈希表/散列表hash table在插入.删除.查找上具有"平均常数时间复杂度"O(1):且不依赖输入数据的随机性. hash table的实现有线性探测.二次探测.二次散列等实现,SGI的STL是采用开链法(separate chaining)来实现的.大概原理就是在hash table的每一项都是个指针(指向一个链表),叫做bucket.

《STL源码剖析》---stl_alloc.h阅读笔记

这一节是讲空间的配置与释放,但不涉及对象的构造和析构,只是讲解对象构造前空前的申请以及对象析构后空间怎么释放. SGI版本的STL对空间的的申请和释放做了如下考虑: 1.向堆申请空间 2.考虑了多线程.但是这节目的只是讲解空间配置与释放,因此忽略了多线程,集中学习空间的申请和释放. 3.内存不足时的应变措施 4.考虑到了内存碎片的问题.多次申请释放小块内存可能会造成内存碎片. 在C++中,内存的申请和释放是通过operator new函数和operator delete函数,这两个函数相当于C语

深度学习论文阅读笔记--Deep Learning Face Representation from Predicting 10,000 Classes

来自:CVPR 2014   作者:Yi Sun ,Xiaogang Wang,Xiaoao Tang 题目:Deep Learning Face Representation from Predicting 10,000 Classes 主要内容:通过深度学习来进行图像高级特征表示(DeepID),进而进行人脸的分类. 优点:在人脸验证上面做,可以很好的扩展到其他的应用,并且夸数据库有效性:在数据库中的类别越多时,其泛化能力越强,特征比较少,不像其他特征好几K甚至上M,好的泛化能力+不过拟合于

Java Jdk1.8 HashMap源码阅读笔记二

三.源码阅读 3.元素包含containsKey(Object key) /** * Returns <tt>true</tt> if this map contains a mapping for the * specified key. * * @param key The key whose presence in this map is to be tested * @return <tt>true</tt> if this map contains