1. 指针的加减运算
1)指针相减,表示两指针之间所相差的内存单元数或元素的个数。
2)指针的乘、除、加的运算均没有意义
2. 指针的关系运算
1)p1 == p2 : 表示p1和p2指向同一内存单元
2)p1 > p2 : 表示p1处于高地址位置
3. 数组和指针
1)数组的指针,就是数组在内存中的起始地址,即数组变量名。
int a[10], *p;
p = a; //或 *p = &a[0]
2)使用数组下标访问数组元素,等价于 使用数组的指针访问数组元素。
3)p+i 和 a+i 都是数组元素 a[i] 地址。
4)*(p+i) 和 *(a+i) 就是数组元素 a[i]。
5)p[i] 等价于 *(p+i),也等价于 a[i]。
6)数组名a是地址常量,不可对其赋值,也不可做 ++ 或 -- 运算。
4. 数组指针 — 指向多位数组的指针
1)一般指针变量对多维数组的引用:
short int a[2][3] = { {1, 2, 3}, {4, 5, 6} };
short int *p;
p = &a[0][0]; //等价于 p = a[0];
2)指针p指向二维数组a时,p相当于一个一维数组,访问元素可以用 p[0], .., p[5] 或 *(p+0) .., *(p+5) 来表示。
5. 二维数组中的行地址和列地址
1)int a[3] [2],其结构为:
2)a [i](即 *(a+i) ) 既可以看成是一维数组 a 的下标为 i 的元素,又可以看成是由 a [i] [0], a [i] [1] 两个元素组成的一维整型数组的数组名,代表这个一维数组的首地址,即第一个元素 a [i] [0] 的地址(&a[i][0])。
3)a[i]+j(即 *(a+j)+j) 代表这个数组中下标为 j 的元素的地址,即 &a[i][j]。
4)*(a[i]+j)(即*(*(a+i)+j))代表这个地址所指向的元素的值,即 a[i][j]。
5)以下四种表示元素 a[i][j] 的形式是等价的:
a[i][j]
*(a[i]+j)
*(*(a+1)+j)
(*(a+i))[j]
6)如果将 a 看成一个行地址(第0行的地址),则 a+i 代表 a 的第 i 行的地址,a[i] 可看成一个列地址,即第 i 行第0列的地址。
7)行地址 a 每次加1,表示指向下一行,而列地址 a[i] 每次加一,表示指向下一列。
6. 行指针
1)以二维数组 a 为例,定义行指针p:
//定义
int (*p)[2]; //指定列数为2
//初始化
p = a; //或 p = &a[0];
2)使用行指针p访问二维数组 a 的元素 a[i][j] 的方法有四种:]
p[i][j]
*(p[i]+j)
*(*(p+1)+j)
(*(p+i))[j]
7. 列指针
1)同样以二维数组 a 为例,定义列指针p:
int main ()
{
int a[3][2] = { {7, 2}, {2, 8}, {5, 9} };
//定义列指针p
int *p;
//初始化
p = a[0]; //或 p = *a, 或 p = &a[0][0];
printf("p[3] = %d\n", p[3]); //输出 p[3] = 8
return 0;
}
2)此时,可以将 a 看成一个由(3行x2列)个元素组成的一维数组,然后像访问一维数组一样访问 a。
3)对于列指针p, p [i] [j] 写法是错误的。
8. 指针数组
1)当某个数组单元都是指针型数据时,这个数组被称为指针数组。
2)定义与赋值:
int main ()
{
char c[3] = { 'a', 'b', 'c' };
//定义长度为3的指针型数组p
char *p[3];
//赋值
p[0] = &c[0];
p[1] = &c[1];
p[2] = &c[2];
return 0;
}
2)指针数组和二维数组行指针的区别:
分享到:
相关推荐
C语言中的指针是一种基础而...本文档为C语言指针的学习笔记,从基础到深入逐步介绍了指针的概念、定义、初始化、运算和使用。通过本文档的阅读,学习者应能更好地掌握C语言中的指针知识,并在实际编程中正确使用指针。
本压缩包“C语言学习笔记.zip”包含了丰富的C语言学习资料,主要集中在“c-notes-master”这个子目录下,适合初学者和有一定基础的程序员进行深入学习。 在C语言的学习中,首先要掌握的基本概念包括变量、数据类型...
本学习笔记旨在全面覆盖C语言的基础部分,帮助初学者掌握其核心概念和语法。 一、C语言概述 C语言由贝尔实验室的Dennis Ritchie在1972年创造,它的特点是运行效率高,程序控制性强,语法简洁。C语言是许多现代编程...
本压缩包包含的“C语言学习笔记”是一份详尽的C语言学习资料,旨在帮助读者深入理解和掌握C语言的基本概念、语法结构以及实际应用技巧。 一、C语言基础 C语言的基础包括变量、数据类型、运算符、流程控制等。变量...
本压缩包包含了一份精心整理的C语言学习笔记,旨在帮助读者深入理解和掌握C语言的核心概念与技术。 笔记首先从基础语法开始,包括变量、数据类型、运算符以及表达式。C语言中的数据类型有基本类型如int、char、...
总的来说,"C语言100例及教程" 是一个全面的C语言学习资源,不仅提供基础理论知识,更强调实践操作,对于想要系统学习和提高C语言技能的人来说,是一份宝贵的资料。通过系统学习和反复实践,学习者可以逐渐掌握C语言...
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明...
本资源包"**C语言学习笔记——基础知识篇**"是为C语言初学者或需要复习C语言概念的人准备的宝贵资料。 首先,我们要了解C语言的基础知识。C语言的语法结构基于ALGOL60和BCPL,由Dennis Ritchie在贝尔实验室设计和...
### C语言学习笔记知识点梳理 #### 一、C语言中的函数 C语言中的函数是程序设计的基本单位之一,主要用于组织代码、实现特定功能并能够被重复调用。 1. **函数分类** - **库函数**:由系统提供的标准函数,如`...
### C语言学习笔记_指针 #### 指针的重要性及基本概念 在C语言中,指针是一种非常重要的数据类型,它不仅丰富了C语言的功能,还是衡量开发者是否熟练掌握C语言的关键指标之一。指针能够让程序员像操作低级语言(如...
### 超强的C语言指针学习笔记 #### 知识点概览 本文将深入探讨C语言中的指针概念及其复杂声明的理解方法——右左法则。文章将分为以下几个部分进行详细介绍: 1. **指针基础知识回顾** 2. **右左法则详解** 3. **...
《C语言和C++Builder学习笔记.docx》这份文档可能包含了作者在学习过程中的心得、示例代码和解决问题的经验,对于初学者来说是一份宝贵的资源。通过深入阅读和理解,你将能够更好地掌握C语言和C++Builder的基本原理...
本文总结了嵌入式C语言学习笔记的要点,涵盖了运算符优先级、指针的用法、二分法查找、字符串操作、冒泡排序法、寻址方式、存储区域、volatile含义及应用等多个方面。 一、运算符优先级 在C语言中,运算符的优先级...
C语言是一种广泛使用的编程语言,尤其适合底层系统开发...通过逐步学习和实践,你可以掌握C语言的基本要素,从而为进一步深入学习打下坚实的基础。记得在编程过程中多做实验,遇到问题及时纠正,与他人交流,共同进步。
在C语言中,变量、数组和指针是编程的基础元素,理解它们的性质和操作方式对于深入学习C语言至关重要。让我们逐一探讨这些知识点。 首先,我们来看“变量”。变量是存储数据的容器,它们可以存储各种类型的数据,如...
吉林大学的讲师精心编写的《C语言学习笔记part_1》旨在为初学者提供一个系统学习C语言的平台,涵盖C语言的基础概念、语法和常见操作,并以直观的图片形式展示示例,使得抽象的编程知识变得生动具体。 首先,C语言的...
docx格式通常用于存储文字内容,可能是老师的讲义,也可能是学员的学习笔记。 现在,让我们深入探讨一下C语言的一些关键知识点: 1. **基础语法**:C语言的基础包括变量(varibles)、数据类型(如int, float, ...
"C语言学习笔记" 本笔记总结了C语言的基础知识点,包括数据类型、输入输出函数、格式输出函数等。 一、数据类型 C语言的数据类型可以分为四类:基本类型、构造类型、指针类型和空类型。基本类型又可以分为整型、...