• 【C语言】指针作为参数传值常见问题


     一、 指针定义:

            指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是存储地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

            指针描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。

    二、 遇到的问题:

    今天上午用c语言复习单链表时,在赋值时出现取不到值的问题,让我很疑惑。

            后面我仔细看了几遍,发现我要操作的是给指针赋值,按理来说我应该把指针的地址传进去,我天真的以为,我传进去的指针不就是地址吗? 其实不然, 

            例如:int  a=0;    int * p=&a;

            我们传进去的指针变量其实是它指向的变量的地址,所以说,如果我操作的是a的值,那我可以传指针变量的值进去即可。 但是如果我要操作的是p的值,那我就要把p的地址传进去。

            对于上面的问题,我应该把方法改成:

            bool  InitList(LinkList &L);

            bool  Empty(LinkList &L);

     代码:

    1. #include
    2. #include
    3. /**
    4. 定义链表存储结构
    5. */
    6. typedef struct LNode{
    7. int data;
    8. LNode *next;
    9. }LNode,*LinkList;
    10. int main(){
    11. bool InitList(LinkList &L);//声明
    12. bool Empty(LinkList &L);//声明
    13. //先有变量再用指针,不然指针会指向一个我们不希望的地方
    14. // LNode L;
    15. LinkList p=NULL;
    16. InitList(p);
    17. printf("成功初始化\n");
    18. Empty(p);
    19. return 0;
    20. }
    21. /**
    22. 初始化带头结点的链表
    23. */
    24. bool InitList(LinkList &L){
    25. L=(LNode*)malloc(sizeof(LNode));
    26. if(L==NULL)return false;
    27. L->next=NULL;
    28. return true;
    29. }
    30. /**
    31. 判断单链表是否为空
    32. */
    33. bool Empty(LinkList &L){
    34. if(L->next==NULL){
    35. printf("链表为空\n");
    36. return true;
    37. }
    38. else{
    39. printf("链表不为空\n");
    40. return false;
    41. }
    42. }

  • 相关阅读:
    Ubuntu20.0中安装Gradle
    LeetCode周赛317场 && AcWing周赛77场总结
    GBase 8c PGXC_CLASS系统表
    DataOps 不是工具,而是帮助企业实现数据价值的最佳实践
    uni-app yrkDataPicker 日期和时间选择控件
    力扣 -- 227. 基本计算器 II
    【Vue 基础知识】控制元素显示隐藏的方法和区别
    C语言:char与unsigned char类型数据的范围
    企业发展必不可缺——BPM系统
    Web3时代到来:非洲兄弟已经在用它“养家糊口”
  • 原文地址:https://blog.csdn.net/m0_56233309/article/details/126400651