顺序表的初始化的伪代码中的引用参数怎么用C语言做出相同的效果

img


图一是伪代码,图二是一种方法,我看不懂图2的形参为什么定义了一个指针变量,然后实参为什么又成了&La

img

没看出是伪代码,看上去都是C++代码
如果用指针,那么需要在函数外面先初始化SqList L本身,而函数内只是初始化L->elem
引用+指针,可以初始化SqList

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7584382
  • 这篇博客你也可以参考下:求大佬指点C语言利用指向指针的指针输出一维数组中偶数的元素,并统计偶数个数代码中的错误
  • 同时,你还可以查看手册:c语言-内存模型与数据竞争 中的内容
  • 除此之外, 这篇博客: C语言图解栈帧的形成与释放【全网第二详细分析版】中的 栈帧的形成我们已经完成了,还有一个细节要提一下 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述

    形成栈帧就是esp-某个值之后形成新的栈顶,和栈底地址形成了一块内存空间,但是问题是,编译器为啥能知道,要减多少呢,要形成多大的内存空间的!!!
    解释:编译器是有能力知道的,总所周知,C语言是有类型关键字的,比如:int double float等,还有一个关键字叫左sizeof可以求各个类型数据的大小,那么sizeof求大小,是在编译时求还是在运行之后求出来呢?
    答案是在编译时,因为sizeof是关键字。不是函数!!!因为这一点,编译器就有能力,判断出栈帧该申请多大空间

  • 您还可以看一下 CSDN讲师老师的C语言精髓之编译过程视频教程课程中的 计算机的组成部分,栈内存的特点;画出内存图,引入指针的概念小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    伪代码如下:

    //定义一个结构体,表示顺序表 typedef struct { int *elem; //用指针表示数据域 int length; //当前长度 int size; //当前占用空间 } seqList;

    //初始化一个顺序表 void initList(seqList L, int arr, int n) { L->elem = (int)malloc(sizeof(int)n); //为数据域分配内存 L->length = n; L->size = n; for(int i=0; ielem[i] = arr[i]; //将传入的数组元素存入顺序表中 } }

    解释:

    在定义一个结构体类型 seqList,表示顺序表。

    在结构体中定义了三个成员变量,分别是:elem(用指针来表示数据域)、length(表示当前长度)、size(表示当前占用空间)。

    定义了一个 initList 函数来初始化顺序表,需要传入三个参数:一个 seqList 类型的指针 L,一个整型数组 arr,数组元素个数 n。

    函数内部,首先为顺序表的数据域 elem 分配内存,大小为 sizeof(int)*n。

    然后将顺序表的 length 设置为 n,将 size 设置为 n。

    然后循环遍历数组 arr,将数组元素存入顺序表中。

    关于图二的实现方式与说明:

    形参需要定义指针变量是因为我们需要修改顺序表的值,而指针变量引用的是该变量的地址,可以直接修改变量本身的值。

    实参需要加 & 符号是因为我们要传入该变量的地址,使指针变量可以引用该变量。

    具体实现可以看上面的伪代码和注释。