zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言入门之指针(1)

C语言入门 指针
2023-09-14 09:16:39 时间
  • 指針是什么

  1. 如果在程序中定义了一个变量,在对程序进行编译时,系统就会给变量分配内存单元
  2. 内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。
  3. 在地址所标的内存单元中存放数据,这相当于旅馆房间中居住的旅客一样。
  4. 由于通过地址能找到所需的变量单元,我们可以说,地址指向该变量单元
  5. 将地址形象化地称为“指针

为了表示将数值3送到变量中,可以有两种表达方法:

  1. 3直接送到变量i所标识的单元中,例如:i=3;
  2. 3送到变量i_pointer所指向的单元(即变量i的存储单元),例如:*i_pointer=3; 其中*i_pointer表示i_pointer指向的对象

指向就是通过地址来体现的

假设i_pointer中的值是变量i的地址(2000),这样就在i_pointer和变量i之间建立起一种联系,即通过i_pointer能知道i的地址,从而找到变量i的内存单元

由于通过地址能找到所需的变量单元,因此说,地址指向该变量单元

将地址形象化地称为“指针”。意思是通过它能找到以它为地址的内存单元

一个变量的地址称为该变量的“指针

例如,地址2000是变量i的指针

  1. 如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量
  2. i_pointer就是一个指针变量。指针变量就是地址变量,用来存放地址的变量,指針变量的值是地址(即指针)
  3. 指针”和“指针变量不同的概念
  4. 可以说变量i的指针是2000,而不能说i的指针变量是2000
  5. 指针是一个地址,而指针变量是存放地址的变量
  • 怎样定义指针变量

定义指针变量的一般形式为:

       类型  * 指针变量名;

如:int *pointer_1, *pointer_2;

  1. int指针变量指定的“基类型
  2. 基类型指定指针变量可指向的变量类型
  3. pointer_1可以指向整型变量,但不能指向浮点型变量

下面都是合法的定义和初始化

float  *pointer_3;

char  *pointer_4;

int  a,b;

int  *pointer_1=&a,*pointer_2=&b;

  • 怎样引用指针变量

要熟练掌握两个有关的运算符:

(1)   取地址运算符。

           &a是变量a的地址

(2) *  指针运算符(“间接访问”运算符)

  如果: p指向变量a,则*p就代表a。

  k=*p;       (a的值赋给k)

                   *p=1;       (把1赋给a)

  • 指针常量

  • 常量指针

  • 指向常量的指针常量

首先看下形参是非指针变量的两数交换的实例

再来看下形参是指针变量的两数交换的实例

最后来看下形参是指针变量的两数交换指针指向的实例

  1. 如果想通过函数调用得到n个要改变的值, 可以通过指针作为形参来实现
  2. 注意:函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作参数,可以得到多个变化了的值。如果不用指针变量是难以做到这一点的。
  3. 要善于利用指针法

例如: 输入2个数,要求得到两个数的和的结果

#include <stdio.h>  //包含标准输入输出头文件
void calcFunc(int x,int y,int * result);  //函数声明
int main(void)  //主函数,程序的入口
{    
     int a,b,c;    //定义整型变量a,b
     scanf(“%d,%d”,&a,&b);  // 从键盘输入2个数存入a,b
     calcFunc(a,b,&c);   // calcFunc函数调用
     printf("a+b=%d\n",c);
     return 0;
}
void calcFunc(int x,int y,int * result) 
{  	
   
    *result = a + b;  //和值赋给result指向的对象
    
}