zoukankan      html  css  js  c++  java
  • C语言中和指针相关的四道题目

    例子1.

    void fun (int *x , int *y) {
      printf("%d, %d", *x, *y) ;
      *x = 3;
      *y = 4;
    }

    main()
    {
    int x = 1, y = 2
    fun(&y, &x);
    printf("%d, %d", x, y);
    }


    结果
    2, 1
    4, 3

    注意main在调用fun函数时, y 和x故意写颠倒了。

     --------------------------------------------------------------

    例子2. 

    #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;
    scanf(%d %d, p1, p2);
    swap(p1, p2);
    prinf("%d, %d", *p1, *p2);
    }

    如果在控制台输入  2 和 5

    则输出结果为 

    5, 2

    原因: 在调用swap函数时使用了职称,所以在swap函数内部对p1,p2 所引用的内容值的修改,会影响外面的a和b的值。

     --------------------------------------------------------------

    例子3:

    #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;
    scanf(%d %d, p1, p2);
    swap(p1, p2);
    prinf("%d, %d", *p1, *p2);
    }

    和2不同, swap函数中的temp为指针,temp=p1使得temp指向了2,p1=p2使得p1指向了5,p2=temp使得p2指向了5.

    但最后的打印结果仍为
    2,5


    原因是:虽然main中调用swap函数时使用了指针传递,但swap函数中的所有操作都是:将指针本身的修改,而没有再次使用*操作符来修改“指针指向的内容值”

    ---------------------------------------------------------------------

    例子4:

    #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;
    scanf(%d %d, p1, p2);
    swap(p1, p2);
    prinf("%d, %d", *p1, *p2);
    }

    和2很像。但唯一不同是,temp定义为指针而不是普通变量。看上去似乎应该和2的输出结果一样,仍为
    2,5 。

    但实际运行时编译器会报错:非法的内存写入。

    原因是:temp为野指针,并没有预订指向哪里。如果指向系统区,则可能导致操作系统死机。

    如果temp在定义后,马上给一个初始值,就不会有问题了。

  • 相关阅读:
    delphi 多线程定时执行程序如何写
    delphi 把多个线程的请求阻塞到另一个线程 TElegantThread
    delphi 对TThread扩充TSimpleThread
    Delphi 线程Timer (TThreadTimer)
    vue-01-插值表达式、事件修饰符
    ORA-12516:监听程序找不到服务协议堆栈要求的可用处理程序(转)
    Io 异常: The Network Adapter could not establish the connection(转)
    "Cannot read property 'xxx' of undefined" js问题之某属性未定义
    数据库用日期作为条件来查询数据
    Docker Registry配置客户端
  • 原文地址:https://www.cnblogs.com/kungfupanda/p/4162040.html
Copyright © 2011-2022 走看看