qimujun
迷途的启木菌
采纳率90.5%
2020-06-09 10:25

使用了指针,但是函数的形参仍然无法传递给实参

已采纳

这是个顺序表,自定义的函数MakeEmpty(SqList *S)对顺序表进行初始化,但是初始化后的S的形参的值length=0,无法传递给实参。请问是为什么啊,然后怎么在这个函数内部能让形参传递给实参呢?

#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 27/*存储空间初始分配量*/
typedef int ElemType;/*ElemType类型根据实际情况而定,这里假设为int*/

typedef struct
{/*线性表的顺序存储结构*/
    ElemType data[MAXSIZE];/*数组存储数据元素*/
    int length;/*线性表的当前长度*/
}SqList;

void MakeEmpty(SqList *S)
{/*初始化顺序表*/
    S = (SqList *)malloc(sizeof(SqList));
    S->length = 1;
}

int main(void)
{
    SqList Sa;MakeEmpty(&Sa);
    SqList Sb;MakeEmpty(&Sb);
    SqList Sc;MakeEmpty(&Sc);

    return 0;
}

测试效果
运行时,形参的值是改变了的
图片说明

但是这个形参s的length值却没有传递个实参
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • qiu_shaofeng qiu_shaofeng 1年前

    问题出在 S = (SqList *)malloc(sizeof(SqList));这条语句要删除。
    实参&Sa在子函数中被malloc修改为S,返回后S不存在,当然也修改不了length。
    值传递,地址传递,实际上都是值传递。

    点赞 1 评论 复制链接分享