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