黑马程序员---【C语言】05指针

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、直接引用

程序对变量的读写操作,实际上是对变量所在的存储空间进行写入或取出数据。就上面的代码而言,系统会自动将变量名a转换为变量的存储地址,根据地址找到变量a的存储空间,然后再将数据10以2进制的形式放入变量a的存储空间中。

通过变量名引用变量,由系统自动完成变量名和其存储地址之间的转换,称为变量的"直接引用"方式

二、什么是指针

C语言中还有一种"间接引用"的方式(以变量a为例):首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读写变量a的值。这就是"间接引用"。

如果程序通过"间接引用"的方式来修改a的值,可以这样做:先根据 变量名b 获取 变量b 的地址ffc2,取出变量b中存储的内容ffc1,也就是变量a的地址,再根据变量a的地址ffc1找到a的存储空间,然后修改里面的数据。

总结一句:用来存放变量地址的变量,就称为"指针变量"。在上面的情况下,变量b就是个"指针变量",我们可以说指针变量b指向变量a。


三、指针的定义

一般形式:类名标识符  *指针变量名;
int *p;
float * p1;

四、指针的初始化

1、先定义后初始化

// 定义int类型的变量a
 int a = 10;
 
 // 定义一个指针变量p
 int *p;
 
 // 将变量a的地址赋值给指针变量p,所以指针变量p指向变量a
 p = &a;

2、在定义的同时初始化

// 定义int类型的变量a
int a = 10;

// 定义一个指针变量p
// 并将变量a的地址赋值给指针变量p,所以指针变量p指向变量a
int *p = &a;

二、指针运算符

1、给指针指向的变量赋值

 char a = 10;
 printf("修改前,a的值:%d\n", a);
 
 // 指针变量p指向变量a
 char *p = &a;
 
 // 通过指针变量p间接修改变量a的值
 *p = 9;
 
 printf("修改后,a的值:%d", a);

2、取出指针所指向变量的值

char a = 10;
 
char *p;
p = &a; 
char value = *p;
printf("取出a的值:%d", value); 

五、指针的用途举例

例1、利用指针交换两个变量的值

 #include <stdio.h>
 void swap(char *v1, char *v2) {
 // 中间变量
 char temp;
 
     // 取出v1指向的变量的值
     temp = *v1;
     
     // 取出v2指向的变量的值,然后赋值给v1指向的变量
     *v1 = *v2;
     
     // 赋值给v2指向的变量
     *v2 = temp;
 }
 
 int main()
 {
     char a = 10, b = 9;
     printf("更换前:a=%d, b=%d\n", a, b);
     
     swap(&a, &b);
     
     printf("更换后:a=%d, b=%d", a, b);
     return 0;
 }

例2、利用指针实现多返回值

// 计算2个整型的和与差
int sumAndMinus(int v1, int v2, int *minus) {
    // 计算差,并赋值给指针指向的变量
    *minus = v1 - v2;
    
    // 计算和,并返回和
    return v1 + v2;
}

int main()
{
    // 定义2个int型变量
    int a = 6, b = 2;

    // 定义2个变量来分别接收和与差
    int sum, minus;

    // 调用函数
    sum = sumAndMinus(a, b, &minus);
    
    // 打印和
    printf("%d+%d=%d\n", a, b, sum);
    
    // 打印差
    printf("%d-%d=%d\n", a, b, minus);
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值