黑马程序员--C语言中的指针(6)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

本章小结

1. 指针是C语言中一个重要的组成部分,使用指针编程有以下优点:

(1)提高程序的编译效率和执行速度。

(2)通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯。

(3)可以实现动态的存储分配。

(4)便于表示各种数据结构,编写高质量的程序。

2. 指针的运算

(1)取地址运算符&:求变量的地址

(2)取内容运算符*:表示指针所指的变量

(3)赋值运算 ·把变量地址赋予指针变量 ·同类型指针变量相互赋值 ·把数组,字符串的首地址赋予指针变量 ·把函数入口地址赋予指针变量

(4)加减运算 对指向数组,字符串的指针变量可以进行加减运算,如p+n,p-n,p++,p--等。对指向同一数组的两个指针变量可以相减。对指向其它类型的指针变量作加减运算是无意义的。

(5)关系运算 指向同一数组的两个指针变量之间可以进行大于、小于、 等于比较运算。指针可与0比较,p==0表示p为空指针。

3. 与指针有关的各种说明和意义见下表。

int *p;     p为指向整型量的指针变量

int *p[n];   p为指针数组,由n个指向整型量的指针元素组成。

int (*p)[n];  p为指向整型二维数组的指针变量,二维数组的列数为n

int *p()    p为返回指针值的函数,该指针指向整型量

int (*p)()   p为指向函数的指针,该函数返回整型量

int **p     p为一个指向另一指针的指针变量,该指针指向一个整型量。

4. 有关指针的说明很多是由指针,数组,函数说明组合而成的。 但并不是可以任意组合,例如数组不能由函数组成,即数组元素不能是一个函数;函数也不能返回一个数组或返回另一个函数。例如 int a[5]();就是错误的。

5. 关于括号 在解释组合说明符时, 标识符右边的方括号和圆括号优先于标识符左边的“*”号,而方括号和圆括号以相同的优先级从左到右结合。但可以用圆括号改变约定的结合顺序。

6. 阅读组合说明符的规则是“从里向外”。 从标识符开始,先看它右边有无方括号或园括号,如有则先作出解释,再看左边有无*号。 如果在任何时候遇到了闭括号,则在继续之前必须用相同的规则处理括号内的内容。例如: int*(*(*a)())[10] ↑ ↑↑↑↑↑↑ 7 6 4 2 1 3 5 上面给出了由内向外的阅读顺序,

下面来解释它:

(1)标识符a被说明为;

(2)一个指针变量,它指向;

(3)一个函数,它返回;

(4)一个指针,该指针指向;

(5)一个有10个元素的数组,其类型为;

(6)指针型,它指向;

(7)int型数据。

因此a是一个函数指针变量,该函数返回的一个指针值又指向一个指针数组,该指针数组的元素指向整型量。

时间: 2024-08-02 18:57:24

黑马程序员--C语言中的指针(6)的相关文章

黑马程序员--C语言中的指针(4)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 使用字符串指针变量与字符数组的区别 用字符数组和字符指针变量都可实现字符串的存储和运算. 但是两者是有区别的.在使用时应注意以下几个问题: 1. 字符串指针变量本身是一个变量,用于存放字符串的首地址.而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘/0’作为串的结束.字符数组是由于若干个数组元素组成的,它可用来存放整个字符串. 2. 对字符数组作初始化赋值,必须采用外部类型或静态

黑马程序员--C语言中的指针(5)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 指针型函数 前面我们介绍过,所谓函数类型是指函数返回值的类型. 在C语言中允许一个函数的返回值是一个指针(即地址), 这种返回指针值的函数称为指针型函数. 定义指针型函数的一般形式为: 类型说明符 *函数名(形参表) { …… /*函数体*/ } 其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针.类型说明符表示了返回的指针值所指向的数据类型. 如: int *ap(int 

黑马程序员--C语言中的指针(3)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 指向多维数组的指针变量 本小节以二维数组为例介绍多维数组的指针变量. 一.多维数组地址的表示方法 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11  设数组a的首地址为1000,各下标变量的首地址及其值如图所示.在第四章中介绍过, C语言允许把一个二维数组分解为多个一维数组来处理.因此数组a可分解为三个一维数组,即a[0],a[1],a[2].每一个一维

黑马程序员--C语言中的指针-我之笔记

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- -------------------------------指针--------------------------------- 指针? 内存单元的编号也叫做地址.既然根据内存单元的 号或地址就可以找到所需的内存单元,所以通常也把这个

黑马程序员--C语言中的指针(2)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 数组指针变量的说明和使用 指向数组的指针变量称为数组指针变量. 在讨论数组指针变量的说明和使用之前,我们先明确几个关系. 一个数组是由连续的一块内存单元组成的. 数组名就是这块连续内存单元的首地址.一个数组也是由各个数组元素(下标变量) 组成的.每个数组元素按其类型不同占有几个连续的内存单元. 一个数组元素的首地址也是指它所占有的几个内存单元的首地址. 一个指针变量既可以指向一个数组,也可以指

黑马程序员-C语言基础:指针类型与指针和数组、字符串的关系

//指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的存储空间: int *p = &a;//这样一句可以写,此时的*只是一个标志,表示这个*只是表示p是个指针: *p = &a;//这样写就错了:此时*p表示取p指向的空间的值: 指针疑问:指针既然都占据8个字节,那么为什么要划分类型, 是因为当用*p指针取值或者赋值的时候,知道该取几个字节,比

黑马程序员——c语言学习心得—— 指针

黑马程序员——c语言学习心得—— 指针 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,打开文件fopen(文件名,打开方式);例如:FILE *fp = fopen("a1","r");  返回的是文件的指针(文件在内存缓冲区的首地址)fopen函数反回值 是指向 a1文件的指针,通常赋值给一个指针变量关于文件名a1 也可以是一个“路径+文件名”   c:\abc.txt----------------

黑马程序员--C语言中的结构体

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 结构(struct)      结构是由基本数据类型构成的.并用一个标识符来命名的各种变量的组合.  结构中可以使用不同的数据类型.      1. 结构说明和结构变量定义      在Turbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此,  象其它  类型的变量一样, 在使用结构变量时要先对其定义.      定义结构变量的一般格式为:       struct 结构名   

黑马程序员--C语言中的枚举

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是: #define MON  1 #define TUE   2 #define WED  3 #define THU   4 #define FRI    5 #define SAT   6 #define SUN   7 在此,我们定义一种新的数据类型,希望它能完成同样的工作.这种新