C语言中 * 和 &的使用

文章描述了在C语言中,由于主函数指针未初始化导致的顺序表初始化时内存错误,以及如何通过使用引用符号&修正这一问题,以避免段异常。
摘要由CSDN通过智能技术生成

 首先来看一下报错的代码,一直报出现段异常的问题。

报错代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

/*顺序表*/
#define MaxSize 10
typedef int ElemType;
typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

/*初始化顺序表*/
void initList(SqList * L){
    L = (SqList *)malloc(sizeof(SqList));

    L->length = 0;
}

/*构建顺序表*/
bool createList(SqList *&L, ElemType a[], int n){
    if(n >= MaxSize) return false;
    if(L->length == MaxSize) return false;
    if(L->length + n == MaxSize) return false;

    for(int i = 0; i < n; i++){
        L->data[L->length++] = a[i];
    }
    return true;
}

/*遍历顺序表*/
void dispList(SqList *&L){
    for(int i = 0; i < L->length; i++){
        printf("%d ", L->data[i]);
    }
    printf("\n");
}

int main(){
    SqList * L;
    int a[] = {2,1,3,5,3,7};
    initList(L);
    createList(L,a,6);
    dispList(L);
    return 0;
}

解决:

在主函数当中,我定义了一个指向顺序表的指针然后调用初始化顺序表的方法来分配一个顺序表,但在这里出现了问题,在主函数创建的指向顺序表的指针变量没有初始化,此时指向内存的未知地址,调用初始化函数后,将指针变量的值赋给函数形参的指针变量时,此时函数形参的指针变量指向的也是主函数中的指针指向的地址。在malloc分配内存时,函数内的指针指向了初始化的顺序表,但是主函数的指针依旧指向的时未知的内存地址。因此在输出时会出现段异常。

修改代码

使用一个引用的符号&,这样主函数内的指针变量和函数内部的指针变量指向的就是同一块地址了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值