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语言学习笔记变量数组指针C语言学习笔记变量数组指针C语言学习笔记变量数组指针
认真学习的人从国内某个培训机构上课时,记录的C语言学习笔记,其中包含所有的C语言基本语法,文章中对指针、字符操作有好多介绍,整理的很全面,并且有图示哦!! 相信对大家学习C语言会有很大帮助!!!
本文档是适合于基础学习C语言指针到深入学习的c语言指针的总结性文档,本人能力有限,如错误之处,请告知我。
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明...
C语言指针,数组,结构体链表,函数的总结
C语言超强的指针学习笔记 C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标 准里面的内容,它是从C标准的声明规定中...
本文档是我从黑基上复制下来的,非本人创作。 内容可当参考用。 地址 超强的指针学习笔记-学院-黑基网 http://www.hackbase.com/tech/2009-09-07/55796.html
详细的C语言指针学习教程,有了它,指针学习不用迷糊
c语言学习笔记
比如int有几个字节的问题,已经是QQ加群验证是否是程序员的一个标准了(笑),这从侧面说明了学习C语言时确实会关心底层软硬件的实现。C语言简单的基于值类型的数据类型体系(引用靠指针,指针本身也是值类型),...
该资源中详细阐述了C语言指针的用法即它的优越性和缺陷。
C语言学习笔记资源包是为C语言初学者精心准备的,它涵盖了C语言的核心知识点,从基础语法到进阶应用。 资源详细内容: 基础语法笔记:详细介绍了C语言的变量、数据类型、运算符、控制结构等基础概念,为学习者打下...
C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类 数据类型,int指针类型,double指针类型,char指针类型等等。 通常,我们用int类型保存...
学习C语言时做的笔记,也是《C语言数据类型——基本类型,构造类型,枚举类型,指针类型》文章对应的思维导图,仅供学习参考,如有侵权,请联删
C语言指针学习笔记.pdf
C语言-指针_笔记,分享出来一起学习,呵呵。
主要讲关于指针的使用的问题,内容丰富详细,总结了指针使用时的各个方面的问题