`

指针基础(一)_c语言学习笔记

 
阅读更多
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+ia+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语言学习笔记 -- 大Z的C语言授课笔记

    认真学习的人从国内某个培训机构上课时,记录的C语言学习笔记,其中包含所有的C语言基本语法,文章中对指针、字符操作有好多介绍,整理的很全面,并且有图示哦!! 相信对大家学习C语言会有很大帮助!!!

    c语言指针学习笔记

    本文档是适合于基础学习C语言指针到深入学习的c语言指针的总结性文档,本人能力有限,如错误之处,请告知我。

    C语言指针学习笔记

    C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明...

    C语言学习笔记.pdf

    C语言指针,数组,结构体链表,函数的总结

    C语言超强的指针学习笔记

    C语言超强的指针学习笔记 C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标 准里面的内容,它是从C标准的声明规定中...

    C语言指针学习笔记C语言指针学习笔记

    本文档是我从黑基上复制下来的,非本人创作。 内容可当参考用。 地址 超强的指针学习笔记-学院-黑基网 http://www.hackbase.com/tech/2009-09-07/55796.html

    超强的C语言指针学习笔记.pdf

    详细的C语言指针学习教程,有了它,指针学习不用迷糊

    c语言学习笔记数组与指针.docx

    c语言学习笔记

    C语言学习笔记

    比如int有几个字节的问题,已经是QQ加群验证是否是程序员的一个标准了(笑),这从侧面说明了学习C语言时确实会关心底层软硬件的实现。C语言简单的基于值类型的数据类型体系(引用靠指针,指针本身也是值类型),...

    C语言学习笔记_指针

    该资源中详细阐述了C语言指针的用法即它的优越性和缺陷。

    C语言学习笔记资源包,C语言初学者必备

    C语言学习笔记资源包是为C语言初学者精心准备的,它涵盖了C语言的核心知识点,从基础语法到进阶应用。 资源详细内容: 基础语法笔记:详细介绍了C语言的变量、数据类型、运算符、控制结构等基础概念,为学习者打下...

    c语言指针学习笔记(24k黄金专属版)

    C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类 数据类型,int指针类型,double指针类型,char指针类型等等。 通常,我们用int类型保存...

    C语言学习笔记_思维导图

    学习C语言时做的笔记,也是《C语言数据类型——基本类型,构造类型,枚举类型,指针类型》文章对应的思维导图,仅供学习参考,如有侵权,请联删

    C语言指针学习笔记.pdf

    C语言指针学习笔记.pdf

    C语言-指针_笔记

    C语言-指针_笔记,分享出来一起学习,呵呵。

    C语言 指针学习的笔记

    主要讲关于指针的使用的问题,内容丰富详细,总结了指针使用时的各个方面的问题

Global site tag (gtag.js) - Google Analytics