c语言指针

 指针

    定义一个指针变量

     变量类型  变量名  初始值

     变量类型为int * , 变量名p,  初始值NULL( 也可以写成0);

    int *p = NULL;

     指针的定义方式可以有三种

     int* p = NULL;

     int *p = NULL;

     int * p = NULL;

     测试指针变量所占空间大小

     printf("%lu\n", sizeof(int *));

     字符型指针变量测试空间大小

    printf("%lu\n",sizeof(char *));

    

     打印指针所存放地址

    int *p = NULL;

     printf("%p\n",p);

    int a = 3;

      printf("a = %p\n",&a);

        指针变量的赋值

     p = &a;

     printf("p = %p\n", p);

     int b = 5;

     printf("b = %p\n",&b);

         指针变量重新赋值

    p = &b;

      printf("p = %p\n",p);

    

     通过指针变量所存地址来访问数据

      int *p = NULL;

    int a = 3;    p = &a;

     一个新的操作符 *

     * 取值操作符(根据内存地址取内容或者取数据)

     & 取址操作符

     通过p找到内存地址, 在使用*操作来修改内存中的数据

    *p = 5;

    可以近似的理解为*p 恒等于a(前提条件, p不重新赋值)

    p = &a  *p = *&a = a;

   printf("a = %d\n",a);

    

     指针的移动

    

    printf("p = %p\n", p);

    printf("p- = %p\n", p - 1);

    printf("p+ = %p\n", p + 1);

     不同类型的指针变量,决定指针每次移动的字节数

     不同类型直接变量,决定从内存当中取多少个字节数据

    

    


    

    int a = 30000;

    用一个char类型的指针保存a 的地址

    char *p = &a;

     通过操作符来取内存当中的数据

    printf("%d\n", *p);

    

    

     相同的操作在不同的地址, 得到的结果会大不相同

    int *p =NULL;

   *p = 5;

    

     数组的本质是一段连续的内存

    数组名 数组的首地址(首元素的首地址常量地址

    array 恒等于&array[0]

   int array[5] = {3, 4, 2, 9, 7};

     定义一个指针变量 用来保存数组的首地址

    int *p = array;

    思考*p是什么? -->相当于是array[0]

   printf("*p = %d",*p);

   那么*(p + 1)是什么相当于-->*&array[1]-->array[1]

    P + 1 相当于是&array[1];

    

    printf("*(p + 1) = %d\n", *(p + 1));

     *p + 1是什么

     *p -->array[0]

     array[0] + 1

   printf("*P + 1 = %d\n",*p + 1);

   

     array[2] -- p[2] -- *(array + 2) -- *(p + 2) 可以相互替换 结果一样

     语法糖

     %s是从首地址一直打印到\0;

    

     定义一个字符串数组

   char string[20] = "MobileInternet";

     定义一个指针保存字符串的首地址

    char *s = string;

    printf("%s\n", s);

     B开始打印到字符串结束

    printf("%s\n", s + 2);

     通过指针修改字符串当中的单个字符

   

   InterI该成i

    s[6] = 'i';

    printf("%s\n", s);

    通过指针修改字符

   

    s[6] = '\0';

     等同与s[6] = 0;

    printf("%s\n", s);

    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值