15~~

int sort(int arr1,int len1,int* arr2,int len2,int len3 )
{
len3=len2+len1;//len 访问指针所指向的内存单元的值
int
result=(int)malloc(len3 * sizeof(int ));
//* 是类型的一部分,用来声明这个变量不是普通的 int 变量
//而是一个指针,专门用于存储内存地址
int i=0,j=0,k=0;
while(i<len1&&j<len2)
{
if(arr1[i]<=arr2[j])
result[k++]=arr1[i++];
else
result[k++]=arr2[j++];
}
while(i<len1)
result[k++]=arr1[i++];
while(j<len2)
result[k++]=arr2[j++];
return result;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
int arr1[1000],arr2[1000];
for(int i=0;i<n;i++)
scanf("%d",&arr1[i]);
for(int j=0;j<m;j++)
scanf("%d",&arr2[j]);

int len3;
int * outcome =sort(arr1,n,arr2,m,&len3);
for(int i=0;i<n+m;i++)
printf("%d ",outcome[i]);
free(outcome);

bug:代码第三十一行为什么用取址符&,而不是*指针?
* 在 C 语言中是 “解引用运算符”,只能用于指针变量(表示访问指针指向的内存)。而 len3 是一个普通的 int 变量(不是指针),
如果写成 len3 会直接报错(编译器会提示 “len3 不是指针”)。
简单说:& 是 “取地址”,用于获取普通变量的内存地址;
是 “解引用”,用于访问指针指向的变量

收获:由于 C 语言的函数参数是值传递(即函数内部的参数只是外部变量的 “副本”),如果直接传递 len3(而不是它的地址),sort 函数无法修改外部 len3 的值。
假设 len3 是一个 “盒子”,里面要存放合并后的长度:&len3 是这个盒子的 “地址”(告诉 sort 函数 “盒子在哪里”)。
sort 函数通过这个地址,把计算好的长度放进盒子里(*len3 = ...)。最终 main 函数就能从盒子里拿到结果。
&len3 的作用是将普通变量 len3 的地址传递给 sort 函数,使得函数内部能修改外部变量的值

posted @ 2025-07-14 11:21  ervgiu28hg34y827  阅读(6)  评论(0)    收藏  举报