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、使用字符指针来保存字符串,它保存的是字符串常量地址,常量区是只读的,所以我们不可以修改字符串中的字符

原文地址:https://www.cnblogs.com/1023843587qq/p/4714903.html