• 02c语言指针基础


    & 用来取一个变量的地址

    * 用来取一个地址的值

    例如:

    (1)&n 获取n的地址

    int *p=&n;

    *p就等于p的值

    (2)

    假设 int n=10;

    *(&n) 就等于先取了n的地址 然后又取了这个地址的值 也就是n 结果是是

    &(*n)就等于先取了地址为10的值,再去取这个值的地址。(但这种是错误的,一定要避免,你不知道地址为10里面到底是什么东西)

    指针初始化

    一般写法
    int I;
    int *p;
    p=&I;

    指针P用来存放I的地址(指针就是用来存储一个变量的地址的)

    简化写法

    int i;
    int *p=&I

    常见错误:

    (1)不可以直接给指针赋值

    eg:

    int *p;

    p=10010;//(错误)

    (2)scanf的错误

    eg:

    int n;

    scanf("%d",n);//正确应该为&n

    向系统输入一个n的地址 

     

    数据交换

    关于函数中的值传递与址传递

    一、址传递

    #include<stdio.h>
    void swap(int *i, int *n)
    {
        int t;
        t = *i;
        *i = *n;
        *n = t;
        printf("%d %d
    ", i, n);
    }
    int main()
    {
        int i = 15, n = 33;
        printf("%d %d
    ", &i, &n);
        swap(&i, &n);
        printf("%d %d
    ", i, n);
        system("pause");
        return 0;
    }

    二、值传递

    #include<stdio.h>
    void swap(int i, int n)
    {
        int t;
        t = i;
        i = n;
        n = t;
        printf("%d %d
    ", i, n);
    }
    int main()
    {
        int i = 15,n=33;
        printf("%d %d
    ", &i, &n);
        swap(i, n);
        printf("%d %d
    ", i, n);
        return 0;
    }

    值传递中发现值并没有发生交换,那是因为函数的形式参数不影响主函数中的i,n两个变量。

    而址传递直接将地址传入到函数内,并通过指针将数值对换,因此交换成功

    下面为几个指针的例子

    #include <stdio.h>
    void fun(int *x, int *y) {
        printf("%d %d 
    ", *x, *y);
        *x = 3;
        *y = 4;
    
    }
    main() {
        int x = 1, y = 2;
        fun(&x, &y);
        printf("%d %d", x, y);
    
    }

    #include <stdio.h>
    void swap(int *p1, int *p2) {
        int *temp;
        temp = p1;
        p1 = p2;
        p2 = temp;
    
    }
    main() {
        int a, b;
        int *p1 = &a, *p2 = &b;
        printf("%d %d
    ", &a, &b);
        scanf_s("%d %d", p1, p2);
        swap(p1, p2);
        printf("%d %d
    ",*p1,*p2);
        printf("%d %d", &a, &b);
    
    }

    地址也并没有进行交换

  • 相关阅读:
    python 和 R 语言中的等差数列
    python 用 matplotlib 绘制误差条图
    Python 模拟伯努利试验和二项分布
    R 基于朴素贝叶斯模型实现手机垃圾短信过滤
    PCA 在手写数字数据集上的应用
    R 实现朴素贝叶斯分类器模型
    R语言 绘制正(余)弦图
    R 绘制反正(余)弦图像
    R 绘制正(余)切图像
    R 语言 do.call() 函数
  • 原文地址:https://www.cnblogs.com/xinmomoyan/p/10539614.html
Copyright © 2020-2023  润新知