• 06深入理解C指针之---指针操作和比较


      该系列文章源于《深入理解C指针》的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教。

      指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则。本节内容中指针的操作主要包括指针的声明、指针值的获取、指针的解引、指针的打印、指针的阅读及其他内容。

    一、指针的操作:

      1、指针的声明,切记指针是一种特殊变量,这种变量中没有直接存储数值,存储的数值是另外变量的地址。

        其中,看代码第6、7、8行,都是指针变量的声明,无论*的位置如何,靠近int还是变量名,还是哪个都不靠近,都可以表示,根据自己的习惯坚持即可,个人建议靠近变量名好。

      2、地址操作符,使用&获取变量地址的符号,常用来为指针变量赋值。

        其中、代码的第6、7、9行,都是地址操作符的应用

      3、指针的打印,使用%p占位符即可打印指针变量的值,另外变量的地址。

        其中、代码的第12、13、14、19、21、23行都是打印指针值的应用

      4、指针的解引用,通过指针获取指针值对应的变量的值。

        其中、代码的第12、13、14、19、21、23行都是指针解引用的应用。

     1 #include <stdio.h>
     2
     3 int main(int argc, char **argv)
     4 {
     5     int iVar = 19;
     6     int *ptrVar1 = &iVar;
     7     int* ptrVar2 = &iVar;
     8     int * ptrVar3 = NULL;
     9     ptrVar3 = &iVar;
    10
    11     printf("the iVar is %d and address is %p
    ", iVar, &iVar);
    12     printf("the ptrVar1 is %p and *ptrVar1 is %d
    ", ptrVar1, *ptrVar1);
    13     printf("the ptrVar2 is %p and *ptrVar2 is %d
    ", ptrVar2, *ptrVar2);
    14     printf("the ptrVar3 is %p and *ptrVar3 is %d
    ", ptrVar3, *ptrVar3);
    15
    16     iVar++;
    17     printf("the iVar is %d and address is %p
    ", iVar, &iVar);
    18     (*ptrVar1)++;
    19     printf("the ptrVar1 is %p and *ptrVar1 is %d
    ", ptrVar1, *ptrVar1);
    20     (*ptrVar2)++;
    21     printf("the ptrVar2 is %p and *ptrVar2 is %d
    ", ptrVar2, *ptrVar2);
    22     (*ptrVar3)++;
    23     printf("the ptrVar3 is %p and *ptrVar3 is %d
    ", ptrVar3, *ptrVar3);
    24
    25     return 0;
    26 }

    二、指针的补充:

      1、null在C语言中充分体现了C语言的逻辑混乱,C语言中null的出现主要和指针变量有关。

        null宏定义中被定义为: #define NULL  ((void *)0)这种定义一般在stddef.h、stdlib.h和stdio.h中出现;

        null可以用来初始化指针变量,表示指针变量指向空,也可以直接将指针变量赋值为零也可;

        null可以在字符中表示全为0的字节,表示不包含任何内容;

        null可以表示字符串表示没有任何内容;

        null语句表示只有一个;没有任何内容的语句

      2、void指针,通用指针,可以存放任何的数据类型的指针,void指针与char指针的存储和对其方式相同,void指针在使用前一般需要先强制转换下    

  • 相关阅读:
    交换排序------冒泡法 及其优化
    [编程题]最大和子矩阵
    [编程题] N阶楼梯上楼问题
    2017年东北大学计算机专业考博 面试编程题(某教授 实验室)
    幸运的袋子 (牛客网 16年网易内推 编程题)
    OpenvSwitch代码分析之bridge和port
    阅读书籍---程序员必读系列
    嵌入式开发之davinci--- 8168 电源调试总结
    嵌入式开发之davinci--- 8148/8168/8127 中的添加算饭scd 场景检测 文档简介
    嵌入式开发之davinci--- 8148/8168/8127 中的图像缩放sclr、swms之后出现图像视频卡顿、屏幕跳跃的问题
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6947339.html
Copyright © 2020-2023  润新知