纸上得来终觉浅(c语言小知识总结)
1.数组的初始定义
对于一个初始定义的数组,内部的值是随机的,若用{}(哪怕其中没有元素)也会让数组内元素初始化,默认为0。
若是用循环语句进行赋值,在一个长度为20的int型数组中赋值3个元素,那么第四个元素为0,剩下的空间中全为随机混乱的。
在超出长度的访问会显示出随机定义。
2.形参实参与指针
一个数组是如何在函数之间传递的
数组名相当于指向数组首地址的常量指针。
因数组代表数组第一个元素的地址,因此用数组名作为实参就可以将数组的起始地址传递给被调函数。所以当被调函数在函数体中修改数组元素时,真正修改的是存储在原存储单元中的数组元素。
void combine(const int b[]); //防止数组中元素被调用函数修改
void combine(int b[]); //正常操作
void combine(int *const b); //与上面等价
void combine(int *b); //普通指针传入,使得传入的数组地址可以被修改!
附上一个简单的顺序表合并程序
#include<stdio.h>
int *combine(int a[],int const *b,int *c,int f,int d) {
int e=0,g=0,h=0;
while(e<f&&g<d) {
if(a[e]>b[g])
c[h++]=b[g++];
else
c[h++]=a[e++];
}
if(e==f)
while(g<d)
c[h++]=b[g++];
else
while(e<f)
c[h++]=a[e++];
return c;
}
int main() {
int a[20],b[20],c[40],f,d;
printf("请输入第一个顺序表的个数\n");
scanf("%d",&f);
printf("请输入第一个顺序表\n");
for(int i=0; i<f; i++)
scanf("%d",&a[i]);
printf("请输入第二个顺序表的个数\n");
scanf("%d",&d);
printf("请输入第二个顺序表\n");
for(int p=0; p<d; p++)
scanf("%d",&b[p]);
combine(a,b,c,f,d);
printf("合成顺序表显示为:\n");
for(int i=0; i<d+f; i++)
printf("%d ",c[i]);
}