zoukankan      html  css  js  c++  java
  • c语言指针segmentation fault 指针常常错误的小地方

    #include <stdio.h>

    #define JUDGE_POINT_TWO 1

    int main()
    {
    #if JUDGE_POINT_TWO
    char str[] = "qingjoin";
    char *ptr = "c program";
    char *point;

    point = str;
    point[2] = 'a';
    point[3] = 'x';
    printf("str=%s\n",str);

    ptr[13] = 'm'; //这个地方是错误的

    printf("ptr=%s\n",ptr);
    #endif
    }

    编译结果:
    # gcc test_point.c -o test_point
    # ./test_point
    str=qiaxjoin
    Segmentation fault

    //char str[] = "qingjoin"; str就数组变量,当地址赋给point后。point[2]就是str[2],它的内容是可以改变的

    //char *ptr = "c program"; 它是先定义一个常量,"c program" 这个常量是定义在“栈”里面,然后将这个常量的地址赋给ptr,而不是*ptr。常量是不能被修改的 所以ptr[13] = 'm'; 就会出错

    
    
    #include <stdio.h>

    #define JUDGE_ONE 1

    int main ()
    {
    #if JUDGE_ONE
    int i = 129;
    int num[] = {20,30,40,50};

    int *p;
    p = &i;

    /**************************************************
    这样是正确的, 或int *p = &i 但 int *p=i这样的话就是错误的
    如果是 *p = i 这样编译时是不会出现错误,但程序运行的时候会出现段错误
    原因是没有给 p 分配内存它没有空间去存放i 的值
    *************************************************
    */

    char *str;
    *str = "qingjoin"; // 这种写法是错误的。因为"qingjoin"是字符串,也是数组,在这里它是常量
    str = "qingjoin" ; // 这种才是正确的 ,赋值的时候赋的是地址,它只能赋给指针变量str;
    printf("%d\n",*p);
    #endif
    }

         int w[5];
    int *pw=w ; // pw表示数组w ,或者说指向变量w[0]
    int *q=&w[2]; // q指向变量w[2]
    int rr[10][5],(*pr)[5]; /* pr是指向一维数组的指针,该一维数组 有5个元素,每个元素是一个整数 */
    pr=rr; // pr指向一维数组rr[0],该rr[0]有5个元素
    int *qr[5]; /* qr是指针数组,有5个元素,每个元素是一个指向 int类型变量的指针 */
    int *(tr[5]); /* 同qr 。tr是指针数组,有5个元素,每个元素是 一个指向int类型变量的指针 */
    qr[1]=&y; // qr[1]指向变量 y


    
    
  • 相关阅读:
    XML(学习笔记)
    css样式学习笔记
    Request(对象)
    sql一些错误修改的总结
    转载(如何学习C#)
    sql server(学习笔记2 W3Cschool)
    sql sqrver(学习笔记1 W3Cschool)
    关于 flutter开发碰到的各种问题,有的已经解决有的一直没解决或者用其他方法替代
    关于 Flutter IOS build It appears that your application still contains the default signing identifier.
    关于 flutter本地化问题 The getter 'pasteButtonLabel' was called on null
  • 原文地址:https://www.cnblogs.com/qingjoin/p/2408944.html
Copyright © 2011-2022 走看看