黑马程序员------C语言中指针的概念和理解

   1、指针变量
 
        用来存放地址的变量,就是指针变量
 
   2、指针?
 
        就是地址
 
   3、指针变量的定义
 
 
        数据类型  *指针变量名;
 
 
      int *p;   //定义了一个指针变量,变量名是p
                //int表示,p只能存放一个int类型的变量的地址
 
      char *p1; //定义了一个指针变量,变量名是p1
                //p1只能存放一个char类型数变量的地址
 
      int num=10;
      char *p = # //警告
 
 
    4、指针变量定义的注意事项
 
      (1)“*”  必须得有,如果没有就相当于定义一个普通变量
      (2)指针变量能用来存放数值或者字符之类的吗? 不能
      (3)指针变量,归根结底还是变量,也有全局和局部变量之


   5,指针变量的初始化和引用
     #include <stdio.h>

int main(int argc, const char * argv[]) {
     
    //定义两个变量,并且给变量进行初始 a = 4, b = 5
    int a=4,b=5;
    //先定义变量,然后在初始化变量值
    int a1;
    a1 = 10;
   
    //指针变量也是变量
    //指针变量的使用: 定义指针变量  ----> 初始化指针变量 ---> 使用(使用指针变量间接的存取内存单元的值)
   
    //指针变量如果不初始化会有什么后果?
    //结论:如果一个指针变量定义以后,如果不进行初始化
    //     这个指针变量存放的事一个垃圾数,这个指针变量,称之为 野指针
   
    //一定要避免操作野指针,因为可能会带来意向不到的错误
    //    int *p10;  //值是一垃圾值,有可能存放是系统程序的地址
    //    *p10 = 438; //可能会造成系统崩溃
    //   
    //    p10 = &a;
   
   
   
    //指针变量如何进行初始化,指针变量应该用地址初始化
   
    //1) 定义的同时进行初始化
    //     (1)完全初始化
           int *p = &a;  //用a的地址初始化 p这个指针变量
                         //另外一种描述方法:p指向了a
   
           int *p1 = &a,*p2 = &a; //p1 p2都指向了a
    //     (2)部分初始化
           int *p3 = &b,*p4;  //定义了两个指针变量 p3 p4
           p4 = &b;
   
   
   
    //2)先定义后初始化
   
        int *p7;
        p7 = NULL;  //
   
   
   
    //(3)如果定义了一个指针变量,但是我不知道让这个指针指向谁
    int *p5 = NULL;  //NULL 是空(0)
    int *p6 = 0;     //空
   
    //把一个指针赋值一个空,什么也不指
   
    //常见的易犯的错误
//    int *p8 = 1000;  杜绝
    p6 = p1;  //p6指向了a
   
   
   
    //******************2、用*来获取指针变量指向的存储单元的内容*****]
    //定义了一个整形变量  *p1 ,p1是一个指针变量
    // *指针变量  作用:获取指针变量指向的内存空间的内容
    //                获取指针变量值所对应的存储单元
    int value = *p1;  //4
    //          给指针变量指向的内存单元赋值
                *p1 = 100;
        value = *p1;  //100
   
    printf("value = %d\n",a);
   
    //"*" 的两种用法
    //(1) 用于定义一个指针变量
    // (2) 存储指针变量指向的存储空间的内容
   
   
    return 0;
}
 
 
   指针的应用场景:
 
   (1)在被函数中可以修改主调函数中的变量的值
 
 
   (2)让函数可以有多个返回值
 
 
 
 


#include <stdio.h>

/**
 *  定义了一个函数
 *  在函数内部通过指针变量修改指针变量指向的内容
 */
void changValue(int *p){

    *p = 100;

}

void test(){

   
    int a = 1;
    int *p1 = &a; //p1指向了a
   
    printf("%p\n",&a);
    printf("%p\n",p1);
   
    changValue(p1);
   
    printf("%d\n",*p1);  //1
    printf("%d\n",a);

}

/**
 *  用指针让函数可以有多个返回值
 *  并不是有多个return
 */
void caculator(int x,int y,int *add,int *jian,int *cheng,float *chu){

    //在函数的内部访问了主调函数中的变量值
    *add = x+y;
    *jian = x-y;
    *cheng = x*y;
    *chu = x/(float)y;
   
}

int main(int argc, const char * argv[]) {

    int add=0;
    int jian=0;
    int cheng=0;
    float chu=0.0f;
   
    caculator(12, 4, &add, &jian, &cheng, &chu);
   
    printf("add = %d\n",add);
    printf("jian = %d\n",jian);
    printf("cheng = %d\n",cheng);
    printf("chu = %.2f\n",chu);
   
    return 0;
}

 6,指针变量定义的注意事项
 
      (1)“*”  必须得有,如果没有就相当于定义一个普通变量
      (2)指针变量能用来存放数值或者字符之类的吗? 不能
      (3)指针变量,归根结底还是变量,也有全局和局部变量之分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值