C语言进阶之指针基础 -- 概念,变量,定义,引用,指针传参

1.指针的概念

地址指的是内存单元的编号,而指针 就是 地址。指针 也是一种数据类型,——指针类型。这种数据类型 是专门用来处理 地址 这种数据。

2.指针变量定义

语法:基类型 * 指针变量名

①基类型:即数据类型 ,包括整型、浮点型、字符型、数组类型、指针类型、结构体类型等等。

基类型的作用是表示该指针类型 所指向的内存空间 存放什么类型的数据。 
②   *   

在定义时,* 表示此时定义的是一个 指针类型 的变量。

③指针变量名:符合标识符命名规则 。

eg:int * p //表示此时定义了一个指针类型的变量p

补充:指针类型

类比普通基本类型:数据类型 变量名;   如int  a;//int 叫整型
  int  * p;      //  int *  ---整体叫指针类型 

int* 含义 :①表示是一个 指针类型  ②表示指向int型数据的指针类型 

3.指针变量初始化

如果指针变量没有初始化,此时是随机值  ---  野指针。

初始化可以让指针变量 有明确指向。

int a = 10;
int *p = &a;   //表示把a的地址放在了p这个指针变量中
---------------------------------------------------------   
int *p = NULL; //NULL 0号地址   --- 空指针 
  

 赋值:
   int * p;
    p = NULL;

 ----------------------------------------------------------  
    int a;
    int *p;
    p = &a;

4.指针变量的引用

① *   //指针运算符,单目运算 ,运算对象只能是指针(地址)。注意区别于定义时的 * 。

②*p   // 表示访问 p所指向的 基类型的 内存空间。此时是间接访问,若通过a访问的,则是直接访问 。

③ * p运算过程:

step1: 首先拿出p中地址,到内存中定位 
step2: 偏移出sizeof(基类型)大小的一块空间 
step3: 将偏移出的这块空间,当做一个基类型变量来看   //*p运算完的效果  

如下图:

所以,*p最终运算效果 相当于就是一个基类型的变量,即*p <=> a。

补充:

注意区分 int *p  与 *p的含义,前者是表示定义了一个指针类型(int *)的变量p,需要对p进行赋值,如int a = 10;p = &a;

后者在引用时,* 是运算符,代表指针变量p所指向的变量的值。 

5.指针作为参数

形参   -- 指针类型 变量 ,用来接收实参 (实参是要操作的内存空间的地址)。
实参   -- 要修改谁,就把谁的地址传过去。 
注意: 要保证 空间有效被调函数中 一定要有 *p 运算 //(间接访问的操作)。

以下是简单示例:交换a和b的值

void swap(int *a, int *b)
 {
     int temp = *a;
      *a = *b;
      *b = temp;
  }


int main(void)
  {
      int a = 6, b = 4;
      int sum = 0;
      int max,min;
      printf("a = %d, b = %d\n",a, b);
   
      swap(&a, &b);
      printf("a = %d, b = %d\n",a, b);
 }        


 注意:  值传递    //只是 实参数据 赋值了形参。  
   地址(指针)传递  //传的是地址 --可以实现被调修改主调 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值