1、地址和指针的概念

(1)地址

内存区的每一个字节都有一个编号,这就是“地址”。如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。

在C语言中,对变量的访问有两种方式:直接访问和间接访问。

直接访问:如:a=5;

系统编译时,已经对变量分配了地址,例如:若变量a分配的地址是2000,则该语句的作用是把把常数保存到地址为2000的单元。

间接访问:如:scanf("%d",&a);

调用函数时,把变量a的地址传递给函数scanf,函数先把该地址保存到一个单元中,然后把从键盘接收的数据通过所储存的地址保存到a变量中。

(2)指针

在C语言中,指针是一种特殊的变量,它是存放地址的。假设我们定义了一个指针变量int*i_pointer;可以通过语句:i_pointer=&i;来存放整型变量i的地址。

2、操作符

*:取值操作符。

&:取值操作符。

如:int i=2000;

  int *pointer;   /*此处的*并非取值,只是表示一个特征*/

  pointer = &i;

  printf("%d\n",*pointer);  /*此处取值*/

3、指针与指针变量

知道了一个变量的地址,就可以通过这个地址来访问这个变量,因此,又把变量的地址称为变量的“指针”。

C语言可以定义一类特殊的变量,这些变量专门用来存放变量的地址,称为指针变量。

指针变量的值(即指针变量中存放的值)是地址(即指针)。注意区分“指针”与"指针变量"这两个概念。

(1)定义一个指针变量“*”。

例:float*pointer_3;  /*pointer_3是指向float型变量的指针变量*/

char*pointer;     /*pointer_4是指向字符型变量的指针变量*/

可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个该变量。

注:a、指针变量前的“*",表示该变量的类型为指针型变量,其一般形式为:类型说明符 *变量名;

其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。

例:float*pointer_1;

指针变量名是pointer_1,而不是*pointer_1。

b、在定义指针变量时必须指定基类型。值得注意的是·,只有整型变量的地址才能放到指向整型变量的指针变量中。

(2)指针变量的引用”&“。

指针变量中只能存放地址(指针),不要将一个整数(或任何其他非地址类型的数据)赋给一个指针变量,否则,编译器也会把该值当成一个地址来处理。

C语言中提供了地址运算符&来表示变量的地址。

其一般形式为:&变量名;

注:变量本身必须预先声明。

例:通过指针变量访问针型变量

#include<stdio.h>

void main()
{
    int a,b;
    int *pointer_1,*pointer_2;
    a=100;
    b=10;
    pointer_1=&a;
    pointer_2=&b;
    printf("%d,%d\n",a,b);
    printf("%d,%d\n",*pointer_1,*pointer_2);
}
02-05 22:15