鱼C论坛

 找回密码
 立即注册
查看: 1064|回复: 3

[已解决]想问一下C语言在定义指针时,有必要将其初始化为NULL吗

[复制链接]
发表于 2021-9-20 10:22:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就比如在主函数中定义的指针La,Lb,Lc,如果初始化为空指针有什么风险
//归并有序线性表之链式存储
#include <stdio.h>
#include<stdlib.h>

typedef struct Node *List;
typedef struct Node {
    int data;
    List next;
} node;

void CreateList_n(List &head, int n)//创建链表,采用尾插入法,首个结点不存储数据
{
    int i = 0;
    head = (List) malloc(sizeof(node));
    head->next = NULL;
    List tail = head;//始终指向尾结点
    printf("请由小到大输入链表表的数据:\n");
    while (i < n) {
        List s = (List) malloc(sizeof(node));//申请新节点的内存
        scanf("%d", &s->data);
        tail->next = s;
        tail = s;
        i++;
    }
    tail->next = NULL;
}

void PrintList(List head)//输出链表的数据
{
    List p = head->next;
    while (p) {
        printf("\t%d", p->data);
        p = p->next;
    }
    putchar('\n');
}

void Merge(List &La, List &Lb, List &Lc) {
    List pa = La->next;
    List pb = Lb->next;
    List pc = La;
    Lc = La;
    while (pa && pb)//两者都不为空指针时
    {
        if (pa->data <= pb->data)//把pa所指的结点插入到链表Lc中,采用尾插法
        {
            pc->next = pa;
            pc = pa;//pc始终指向链表Lc的尾结点
            pa = pa->next;

        } else {
            pc->next = pb;
            pc = pb;
            pb = pb->next;
        }
    }
    //如果走出循环了,有可能是一个链表遍历完了,另一个还没有遍历完.
    pc->next = pa ? pa : pb;//把剩余没有遍历完的数据段插入到Lc后面
    free(Lb);
}

int main() {
    int n;
    printf("请输入链表A的数据规模:\n");
    scanf("%d", &n);
    List La = NULL, Lb = NULL, Lc = NULL;
    CreateList_n(La, n);
    printf("所建的链表A为:\n");
    PrintList(La);
    printf("请输入链表B的数据规模:\n");
    scanf("%d", &n);
    CreateList_n(Lb, n);
    printf("所建的链表A为:\n");
    PrintList(Lb);
    Merge(La, Lb, Lc);
    printf("归并后的链表为:\n");
    PrintList(Lc);
    return 0;
}
最佳答案
2021-9-20 10:33:13
一般来说不需要,你只要在使用之前初始化就可以了
这里说的初始化可不一定就是初始化成 NULL 一般是初始化成一个对象的指针,就是已经可以使用的地址
一个变量的地址或者 malloc 返回的地址
char *str;
// ....
// ....
// ....
str = get_string();

这样定义的时候不初始化成 NULL,在某个位置直接赋值成一个已经可以使用的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-20 10:29:05 | 显示全部楼层
想问一下C语言在定义指针时,有必要将其初始化为NULL吗
这问题不能一概而论,要根据代码的上下文来确定的
一般来说不需要,你只要在使用之前初始化就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-20 10:33:13 | 显示全部楼层    本楼为最佳答案   
一般来说不需要,你只要在使用之前初始化就可以了
这里说的初始化可不一定就是初始化成 NULL 一般是初始化成一个对象的指针,就是已经可以使用的地址
一个变量的地址或者 malloc 返回的地址
char *str;
// ....
// ....
// ....
str = get_string();

这样定义的时候不初始化成 NULL,在某个位置直接赋值成一个已经可以使用的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-20 10:42:25 | 显示全部楼层
人造人 发表于 2021-9-20 10:33
一般来说不需要,你只要在使用之前初始化就可以了
这里说的初始化可不一定就是初始化成 NULL 一般是初始化 ...

行,多谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 08:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表