<22>【掌握】指针变量概念及定义方法+【理解】两变量值交换的方法+【掌握】总结*使用场合

【掌握】指针变量概念及定义方法

   1、指针变量

        用来存放地址的变量,就是指针变量

   2、指针?

        就是地址,地址是个常量

   3、指针变量的定义

        数据类型  *指针变量名;

      int *p;   //定义了一个指针变量,变量名是p
                //int表示,p只能存放一个int类型的变量的地址

      char *p1; //定义了一个指针变量,变量名是p1
                //p1只能存放一个char类型数变量的地址

      int num=10;
      char *p = &num; //警告

    4、指针变量定义的注意事项

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

【掌握】指针变量的初始化和引用

#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 #include <stdio.h>
 2
 3 /**
 4  *  不能交换
 5  *
 6  *  @param a <#a description#>
 7  *  @param b <#b description#>
 8  */
 9 void swap1(int a,int b){
10
11     //此处实质上是形参a和b值得交换,
12     //跟实参没有关系
13     int temp;
14     temp = a;
15     a = b;
16     b = temp;
17
18 }
19
20 //怎么交换正确的交换两个变量的值
21 void swap2(int *p,int *p1){
22
23     //形参变量的地址进行的交换
24     int *temp;
25     temp = p;
26     p = p1;
27     p1 = temp;
28
29 }
30
31 //终级解决方案
32 void swap3(int *p,int *p1){
33
34     //通过指针直接修改变量的值了
35     int temp;
36     temp = *p;
37     *p = *p1;
38     *p1 = temp;
39
40 }
41
42 int main(int argc, const char * argv[]) {
43
44     int a = 4,b = 5;  // a = 5,b = 4
45     printf("交换前:a = %d,b = %d\n",a,b);
46     swap3(&a, &b);
47     printf("交换后:a = %d,b = %d\n",a,b);
48
49
50
51     return 0;
52 }

【掌握】总结*使用场合

指针的应用场景:

   1)在被函数中可以修改主调函数中的变量的值

   2)让函数可以有多个返回值
 
 1 #include <stdio.h>
 2
 3 /**
 4  *  定义了一个函数
 5  *  在函数内部通过指针变量修改指针变量指向的内容
 6  *  @param p
 7  */
 8 void changValue(int *p){
 9
10     *p = 100;
11
12 }
13
14 void test(){
15
16
17     int a = 1;
18     int *p1 = &a; //p1指向了a
19
20     printf("%p\n",&a);
21     printf("%p\n",p1);
22
23     changValue(p1);
24
25     printf("%d\n",*p1);
26     printf("%d\n",a);
27
28 }
29
30 /**
31  *  用指针让函数可以有多个返回值
32  *  并不是有多个return
33  *
34  *  @param x <#x description#>
35  *  @param y <#y description#>
36  *
37  *  @return
38  */
39 void caculator(int x,int y,int *add,int *jian,int *cheng,float *chu){
40
41     //在函数的内部访问了主调函数中的变量值
42     *add = x+y;
43     *jian = x-y;
44     *cheng = x*y;
45     *chu = x/(float)y;
46
47 }
48
49 int main(int argc, const char * argv[]) {
50
51     test();
52
53     int add=0;
54     int jian=0;
55     int cheng=0;
56     float chu=0.0f;
57
58     caculator(12, 4, &add, &jian, &cheng, &chu);
59
60     printf("add = %d\n",add);
61     printf("jian = %d\n",jian);
62     printf("cheng = %d\n",cheng);
63     printf("chu = %.2f\n",chu);
64
65     return 0;
66 }
0x7fff5fbff70c
0x7fff5fbff70c
100
100
add = 16
jian = 8
cheng = 48
chu = 3.00
时间: 2024-08-05 10:54:09

<22>【掌握】指针变量概念及定义方法+【理解】两变量值交换的方法+【掌握】总结*使用场合的相关文章

两个变量值交换的方法

借助其他变量 引入temp暂存其中一方的值 void swap(int &a,int &b) { int temp; temp=a; a=b; b=temp; } 不借助其他变量 加法 void swap(int &a,int &b) { a=a+b; b=a-b; a=a-b; } 缺点:注意加法不要溢出 乘法 void swap(int &a,int &b) { a=a+b; b=a-b; a=a-b; } 缺点:注意加法不要溢出 异或 void swa

编程题:指针变量作函数参数,将两个整数按由大到小的顺序输出。

分析:通过指针变量作函数参数,无需返回值和全局变量,主调函数就可以使用被调用函数改变的值. #include<stdio.h> void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } void main() { int a=3,b=4; int *ptr1,*ptr2; ptr1=&a;ptr2=&b; if(a<b) swap(ptr1,ptr2); printf("%d,%d\n",

关于jmeter中跨线程组?变量值传递的方法

关于jmeter中跨线程组 变量值传递的方法 找了好久,终于找到方法了,赶紧整理下来. 1.在线程组1 中使用__setProperty函数设置jmeter属性值(此值为全局变量值),将所需变量值如${oldtoken} 设置为jmeter属性值,即newtoken,示例: 方法:${__setProperty(newtoken,${oldtoken},)} 2.在线程组2中使用_p函数来调用jmeter属性,获取属性值,从而实现跨线程组,参数值传递. 方法:${__P(newtoken,)}

一种不用参数交换两变量值的方法

除了最简单的三变量法外 还有一种不用参数的交换法 #include <stdio.h> int main(){ int a,b; scanf("%d%d",&a,&b); a=a+b; b=a-b; a=a-b; printf("%d %d\n",a,b); return 0;} 这种方法范围窄,只有定义了加减法的数据类型才可以使用 但只是输出交换变量 所以最简单的方法是 scanf("%d%d",&a,&am

C语言如何交换两变量值?5大方法告诉你!

写在前面: C语言中交换两个变量值的操作经常会用到,也有不少人提问诸如不用临时变量怎么交换两个变量值的问题,今天我们在这里进行一个总结,也算是对这个问题的统一回复,我一共总结了5种方法(名字都是我自己取的,不当之处还请批评指正),希望大家看完有所收获. 1.临时变量法 方法解释:采用临时变量的方法,作为中间过渡,这是最简单也是大家最容易想到的方法,此法在各种场合应用极多,应该熟练掌握. #include<stdio.h> int main(void) { int a=1,b=2,tmp; tm

第6章 数组、指针与字符串(一)指针的概念、定义和指针运算

原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/10234858.html

指针变量:输入a和b两个整数,按先大后小的顺序输出a和b。

#include <stdio.h>int main() { int *p1,*p2,*p,a,b;   printf("please enter two integer numbers:");   scanf("%d,%d",&a,&b);                   // 输入两个整数   p1=&a;                                  // 使p1指向变量a   p2=&b; 

Python、C++中编写函数以及不使用临时变量交换两变量值的比较

在C++中,交换两变量的值一般第一反应都会是如下的代码: { temp=a; a=b; b=temp } 但是题目要求不允许使用临时变量temp呢?可能就需要想一会了.但也有解决办法: { b=a+b; a=b-a; b=b-a; } 这种做法在a和b数值较小的情况下是对的,但是a+b如果很大则会溢出,所以也不是最优的解法.最好的方法是使用异或: { a ^= b b ^=a a ^=b } 在Python中这个问题就太弱智啦! a,b=b,a 直接一行搞定! 如果题目要求编写一个函数来交换两变

C++入门经典-例5.7-调用自定义函数交换两变量值,传入指针

1:代码如下: // 5.7.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; void swap(int *a,int *b) { int tmp; tmp=*a; *a=*b; *b=tmp; } void swap(int a,int b) { int tmp; tmp=a; a=b; b=tmp; } void main() { int x,y;