顺序表的插入——数据结构

本文通过一个C语言实例介绍了指针传递的概念及其在函数中的使用方式。强调了实参与形参类型匹配的重要性,并通过生动的例子解释了如何正确地通过指针改变外部变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-------------------------------------------------

#include<stdio.h>
#define max 10
#define true 1
#define false 0
int insertq(int list[],int i,int x,int *num)
{
    int j;
    if((i<0)||(i>10))
    {
     printf("i值不合法!");
     return(false);
    }
    if(*num>=max-1)
    {
     printf("表已满,无法再插入!");
    return(false);
    }
    for(j=*num+1;j>i;j--)
      list[j]=list[j-1];
    list[i]=x;
    (*num)++;
    return(true);
}
main()
{
    int i=0,x,*num,ch;
    int list[max];
    printf("Input list:");
    while((ch=getchar())!='/n')
    {
     list[i]=ch;
     i++;
    }
    *num=i-1;
    printf("insert No.i:");
    scanf("%d",&i);
    getchar();
    printf("insert data:");
    x=getchar();
    getchar();
    insertq(list,i,x,num);   /*insertq(list,i,num,x)实参和行参数量相等,类型匹配*/
    for(i=0;i<=*num;i++)
       printf("list[%d]=%c/n",i,list[i]);
    printf("/n");
}

-------------------------------------------------

    已经放下C语言好久,才拿着数据结构看,感觉一切都是新的,开始编译程序的时候发现总是得不到正确的结果,插入数据总不按照自己的想法来。看了半天才发现是实参和行参类型不匹配。

   这里引用一段其他高人博客上的话:C语言的“指针传递”总是给人“形参能改变实参”的感觉,其实这是一个误解。对于指针传递来说,函数的形参是一个指针,传给它的实参也应该是指针(或者能 转为指针的值,比如数组名、能转换为指针的类等)。在函数中,如果改变了该指针(对指针的改变就等同于让这个指针指向别处),不会影响主调函数中的实参。 但是,由于指针对应着一个内存地址,通过它可以改变内存的内容。所以,无论在函数内部的形参还是外部的实参,它们都可以影响同一内存的值。所以,指针传递 可以把函数内部的影响带到函数外,但是,带到函数外的绝不是形参,而是形参所指的内存。
  这就好比我把我家的钥匙给你配了一把,我手里的钥匙是实参,你手里的钥匙是形参。你无论是把钥匙折断还是磨短,都与我的钥匙无关,但是你用它开了我家的门却可以把我家洗劫一空。你影响的不是我的钥匙,而是我的财产

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值