C学习笔记(4)--- 指针的应用(第一部分)

1.指针(pointer)概念:

 

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:type *var-name;

在这里,type 是指针的基类型,它必须是一个有效的 C 数据类型,var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。

 

2.指针的应用:

a. 使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。这些是通过使用一元运算符 * 来返回位于操作数所指定地址的变量的值。例子:https://www.runoob.com/cprogramming/c-pointers.html

 

 

b. 在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为指针。

 

NULL 指针是一个定义在标准库中的值为零的常量。 例子: int  *ptr = NULL;   sub :在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。然而,内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。但按照惯例,如果指针包含空值(零值),则假定它不指向任何东西。

 

3. 深入谈指针的运动:

 

a.指针的算术运算:

C 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。

假设 ptr 是一个指向地址 1000 的整型(int)指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算: ptr++; 

ptr将指向1004的地址。相同,如果ptr是个字符(char)的指针,其将指向1001地址。  因为int的长度是4字节,而char是1字节。

 

b.指针数组(pointer array):

假如我们让数组存储指向 int 或 char 或其他数据类型的指针。 例如:int *ptr[MAX]; 

在这里,把 ptr 声明为一个数组,由 MAX 个整数指针组成。因此,ptr 中的每个元素,都是一个指向 int 值的指针。下面的实例用到了三个整数,它们将存储在一个指针数组中。

 

sub:  指针数组(pointer array) 和 数组指针(array pointer)的区别!

指针数组:表示的是一个由指针变量组成的数组,也就是说其中的元素都是指针变量。

数组指针:表示的是这是个指向数组的指针,那么该指针变量存储的地址就必须是数组的首地址,得是个指向行的地址,如 a[2][3] 数组中的 a,a+1 等,不能是具体的指向列的地址,如 &a[0][1], &a[1][1] 这类地址。

 

 

c.指向指针的指针:

 

定义:指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。

int **var;             

 

d.传递指针给函数:

 

 

C 语言允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。

 

下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值:https://www.runoob.com/cprogramming/c-passing-pointers-to-functions.html

 

(通过这种操作,你可以通过改变某个内存地址上的变量的数值来改变其数量。)

 

e.从函数返回指针:

 

int * myFunction(){

。。。

。。。

。。。

}

 

 

另外,C 语言不支持在调用函数时返回局部变量的地址,除非定义局部变量为 static 变量。

 

引用:

https://www.runoob.com/cprogramming/c-return-pointer-from-functions.html

 

 

 

 

 

 

 

 

posted @ 2019-11-15 16:00  Parachute黑喵  阅读(210)  评论(0编辑  收藏  举报