zoukankan      html  css  js  c++  java
  • C语言指针(一)

    一、指针

    定义指针变量

       指针指向的数据类型 *指针变量名称;

       例: int *p;

     *作用:

         1、在定义变量的时候 * 是一个类型说明符,说明定义的这个变量是一个指针变量

         2、在不是定义变量的时候 *是一个操作符,访问指针所指向存储空间

       &作用:

         &作为单目操作符,放在变量的前面,是取出变量的地址

        * 与 & 他们是一对反操作

    指针初始化

    int age = 10;

    int *p = &age;//定义指针同时初始化

    三、指针与字符串

    1、使用字符数组来保存的字符串是保存栈里的,保存栈里面东西是可读可写,所有我们可以改变里面的字符

         当把一个字符串常量赋值一个字符数组的时候,那么它会把字符串常量中的没有字符都放到字符数组里面

      2、使用字符指针来保存字符串,它保存的是字符串常量地址,常量区是只读的,所以我们不可以修改字符串中的字符

    1、多个指针变量可以指向同一个地址

      2、指针的指向是可以改变的

      注意点:

        1、指针没有初始化里面是一个垃圾值,这时候我们这是一个野指针,

           如果操作一个野指针

             1、可能会导致程序崩溃

             2、访问你不该访问数据

           所以指针必须初始化才可以访问其所指向存储区域

        2、指针变量不可以直接赋值一个整形常量,

           因为我们不知道这个整形常量是内存那块地址

    二、指针与数组

    数组不是一个指针

        数组像一个指针,我们可以通过访问指针所指向的存储空间的方式去访问数组中元素

        使用数组名与使用指向数组的指针都可以访问数组中的元素

        char nums[] = {1,2,3,4,5};// 定义一个数组

        printf("nums = %p ",nums);// 输出数组的地址

        printf("%d ",nums[1]);

        char *p  = nums;// 把数组的地址给变量p,数组名就是数组的地址

        printf("%d ",*p);

       // 多种输出方式

        printf("nums[4] = %d ",nums[4]);

        printf("nums[4] = %d ",*(nums+4));

        printf("nums[4] = %d ",p[4]);

        printf("nums[4] = %d ",*(p + 4));

        printf("nums[4] = %d ",4[p]);

    三、指针与字符串

    1、使用字符数组来保存的字符串是保存栈里的,保存栈里面东西是可读可写,所有我们可以改变里面的字符

         当把一个字符串常量赋值一个字符数组的时候,那么它会把字符串常量中的每个字符都放到字符数组里面

      2、使用字符指针来保存字符串,它保存的是字符串常量地址,常量区是只读的,所以我们不可以修改字符串中的字符

  • 相关阅读:
    HDU4652 Dice
    CF113D Museum / BZOJ3270 博物馆
    SHOI2013 超级跳马
    最基本的卷积与反演
    NOI2014 动物园题解
    SP11414 COT3
    new to do
    linux C++中宏定义的问题:error: unable to find string literal operator ‘operator""fmt’ with ‘const char [4]’, ‘long unsigned int’ arguments
    新装vs2010的问题:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    windows下删除虚拟串口的方法,以及解决串口使用中,无法变更设备串口号的问题
  • 原文地址:https://www.cnblogs.com/1023843587qq/p/4714903.html
Copyright © 2011-2022 走看看