C primer plus 读书笔记第十章
这一章的标题是数组和指针。指针是C语言的精髓所在,而数组的概念和指针又息息相关,所以放在一起讲。
1.数组
主要内容有:1.1.数组初始化、1.2.指定初始化、1.3.数组赋值、1.4.数组边界、1.5.指定数组大小。
其中要注意的是,1.2中的C99新增的特性,可以指定某些元素进行初始化。
int arr[6] = {[5]=212};
在该代码中,数组的最后一个元素初始化为212,其他为0。
而1.3中要注意的是,C不支持把数组作为一个整体来赋值,这和Java、python都不一样,也不支持用花括号的列表形式进行赋值(初始化除外)。
2.多维数组
本节没什么好讲的,基本和其他语言一样。
3.指针和数组
指针可以说是C语言的精髓。它提供了一种用来使用地址的符号方法,能够让你类似于计算机底层的表达方式来表达自己的意愿,使得工作更高效。
flizny == &flizny[0]
这个式子的意思是,数组名同时也是该数组首元素的地址。指针的数值就是它所指向的对象的地址。运算符*可以得到该指针所指向对象的数值。对指针加1就表示指针的值加上它所指向的对象的字节大小。所以下面等式成立。
dates + 2 == &date[2] * (dates + 2) == dates[2]
4.函数、数组和指针
这一节总结起来一句话:int sum(int arr[])和int sum(int *arr)等价。
5.指针操作
8种基本操作:赋值——把一个地址赋值给指针,不过通常用数组名或者地址运算符&来进行地址赋值;求值——运算符*取出指针指向地址中存储的数值;取指针地址——运算符&得到存储指针本事的地址;将一个整数加给指针——运算符+,返回地址;增加指针的值——运算符+或++,返回值;从指针中减去一个整数——同上上;减少指针的值——同上上;求差值——求指针直接的差值,返回单位是相应类型的大小;比较——关系运算符比较两个指针的值。
这里特别特别要注意的是,不能对未初始化的指针取值。
int *pt; //未初始化的指针 *pt = 5; //一个可怕的错误
这段代码的第二行表示把数值5存储在pt所指向的地址。但是pt并没有被初始化,因此它的值是随机的,不知道5会被存储在哪个位置。这个位置也许对系统危害不大,但也许会覆盖程序数据或者代码,导致程序崩溃。原因是,当创建一个指针时,系统只分配了这个指针本身的内存空间,而没有分配用来存储数据的内存空间。因此在使用指针之前,必须给它赋予一个已经分配的内存地址,或者使用malloc()函数来先分配内存。
6.保护数组内容
假如函数直接使用指针,那么这个函数能直接使用和改变原始数据。当我们不想改变数组内容的时候,我们可以对形参使用const。
7.指针和多维数组
书上写的有点绕,其实把前面的东西理解透了,自己多思考还是很好理解的。下图说明一切关系。

8.变长数组
C99引入变长数组,所谓的“变”是在创建数组前,创建数组后大小还是不变的。
练习题比较简单,基本上理解了指针遍历就能搞定大多数题目。
C primer plus 读书笔记第十章的更多相关文章
- Java Concurrency in Practice 读书笔记 第十章
粗略看完<Java Concurrency in Practice>这部书,确实是多线程/并发编程的一本好书.里面对各种并发的技术解释得比较透彻,虽然是面向Java的,但很多概念在其他语言 ...
- 《C++ Primer》读书笔记 第一章
读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...
- 《C++ Primer Plus 6th》读书笔记 - 第十章 对象和类
1. 过程性编程和面向对象编程 2. 抽象和类 1. 使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数(或友元函数)来访问对象的私有成员 2. 可以在类声明之外定义成员函数,并使其成为内 ...
- C primer plus 读书笔记第一章
写在前面: 算法和数据结构是计算机学习的基础,而大部分书籍是用C/C++编写.所以有了把C语言重新学一遍的想法.这个系列主要是记录看C primer plus的一些笔记和部分课后习题的答案,不会总结的 ...
- C++ Primer Plus读书笔记
第五章 循环和关系表达式 1. 2.类别别名: (1) #define FLOAT_POINTER float * FLOAT_POINTER pa, pb; 预处理器置换将该声明转换成 flo ...
- 《C++ Primer》读书笔记—第二章 变量和基本类型
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...
- 《C++ Primer》读书笔记—第一章 开始
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.一个函数的定义包含四个部分:返回类型(retur ...
- 《利用python进行数据分析》读书笔记--第十章 时间序列(三)
7.时间序列绘图 pandas时间序列的绘图功能在日期格式化方面比matplotlib原生的要好. #-*- coding:utf-8 -*- import numpy as np import pa ...
- C primer plus 读书笔记第十四章
这一章主要介绍C语言的结构和其他数据形式,是学习算法和数据结构的重点. 1.示例代码 /*book.c -- 仅包含一本书的图书目录*/ #include <stdio.h> #defin ...
随机推荐
- Builder 模式
Builder 模式和 AbstractFactory 模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:Builder 模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的 ...
- SGU 132.Another Chocolate Maniac
时间限制:0.25s 空间限制:4M 题目: Bob非常喜欢巧克力,吃再多也觉得不够.当他的父母告诉他将要买很多矩形巧克力片为他庆祝生日时,他的喜悦是能被理解的.巧克力都是 2x1 或 1x2 的矩形 ...
- Queue学习
Queue在Python中可以算作是一种容器,但是他和list,set,dict不一样. 1. Queue不是Python内置类型.它在Queue模块中定义. 2. 它不是iterator容器,他不能 ...
- 知识库总结mysql常用cmd命令
打开命令目录 打开D盘mysql目录 d: cd D:\Ampps\mysql\bin 常用操作 将mysql目录下bin目录中的mysql.exe放到C:\WINDOWS下,可以执行以下命令 连接: ...
- A题 - A + B Problem
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description Cal ...
- php开发环境安装配置(2)-eclipsephp
使用eclipse编辑php: 1要运行eclipse需要先下载jdk(直接百度jdk就可以这里有分32位和64位) 下载安装,安装会出现安装jdk和jre不能在同一文件夹下应该分开如下即可: 2安装 ...
- EntityFramework Core使用PostgreSQL
EntityFramework Core使用PostgreSQL 0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用 ...
- phpMyAdmin <= 4.0.4.1 import.php GLOBALS变量注入漏洞
漏洞版本: phpMyAdmin <= 4.0.4.1 漏洞描述: CVE(CAN) ID: CVE-2013-4729 phpmyadmin是MySQL数据库的在线管理工具,主要功能包括在线创 ...
- Android的一个自定义的动态添加Dialog类
android里面会有自己内置的Dialog的提示框,也算是比较方便的了,但是为了省点时间,我们在项目里面添加了一个自己的Dialog类,这个类实现了能够动态的添加按钮和一些提示语句或者其他的显示效果 ...
- 数据结构(trie,启发式合并):HDU 5841 Alice and Bob
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABJEAAAE6CAIAAAApz1RvAAAgAElEQVR4nO3d3css1b3g8fyTdbHJbD