我有这个代码将数组 temp 复制到数组 a 我不知道为什么它继续显示值的地址......而不是值
#include <stdio.h>
#include <stdio.h>
#define maxLength 14
#include <conio.h>
#include <string.h>
typedef short int *set;
void copyarr(set a,set temp){
int i;
a=(int*)malloc(maxLength*sizeof(short int));
for(i=0;i<maxLength;i++)
a[i]=temp[i];
}
int main(){
int i;
set a,temp;
temp=(int*)malloc(maxLength*sizeof(short int));
for(i=0;i<maxLength;i++)
temp[i]=i+10;
copyarr(a,temp);
for(i=0;i<maxLength;i++)
printf("%d ",a[i]);
}
修改
更新了代码:仍然得到了相同的结果,我做了FAQ链接中显示的内容
#include <stdio.h>
#include <stdio.h>
#define maxLength 14
#define maxSetLength 129
#include <conio.h>
#include <string.h>
typedef short int *set;
int *copyarr(set a,set temp){
int i;
a=(int*)malloc(maxLength*sizeof(short int));
for(i=0;i<maxLength;i++)
a[i]=temp[i];
return &a;
}
int main(){
int i;
set a,temp;
temp=(int*)malloc(maxLength*sizeof(short int));
for(i=0;i<maxLength;i++)
temp[i]=i+10;
copyarr(&a,temp);
for(i=0;i<maxLength;i++)
printf("%d ",a[i]);
}
答案 0 :(得分:2)
a=(int*)malloc(maxLength*sizeof(short int));
这对来电者没有任何影响。在您的代码中a
是一个指针,您所做的只是更改指针的本地副本。在一天结束时,main
a
仍然没有任何结果。此问题已在此C FAQ中得到充分讨论。
这种混淆的部分原因是隐藏a
是typedef
后面的指针的事实。你像指针一样使用它,并依赖于它是一个指针,但你隐藏了这些信息。当调用者真正不关心实际类型是什么时,你应该只使用typedef。
答案 1 :(得分:0)
typedef short int *set;
set copyarr(set temp){
int i;
set b;
b=(set)malloc(maxLength*sizeof(short int));
for(i=0;i<maxLength;i++)
b[i]=temp[i];
return b;
}
int main(){
int i;
set a,temp;
temp=(set)malloc(maxLength*sizeof(short int));
for(i=0;i<maxLength;i++)
temp[i]=i+10;
a = copyarr(temp);
for(i=0;i<maxLength;i++)
printf("%d ",a[i]);
free(a);
free(temp);
return 0;
}
编辑:
typedef short int *set;
void copyarr(set a, set temp){
int i;
for(i=0;i<maxLength;i++)
a[i]=temp[i];
return;
}
int main(){
int i;
set a,temp;
temp=(set)malloc(maxLength*sizeof(short int));
a=(set)malloc(maxLength*sizeof(short int));
for(i=0;i<maxLength;i++)
temp[i]=i+10;
copyarr(a, temp);
for(i=0;i<maxLength;i++)
printf("%d ",a[i]);
free(a);
free(temp);
return 0;
}
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#define maxLength 14
typedef short int *set;
void copyarr(set *a, set temp){
int i;
*a=malloc(maxLength*sizeof(short int));
for(i=0;i<maxLength;i++)
(*a)[i]=temp[i];
}
int main(){
int i;
set a,temp;
temp = malloc(maxLength*sizeof(short int));
for(i=0;i<maxLength;i++)
temp[i]=i+10;
copyarr(&a,temp);
for(i=0;i<maxLength;i++)
printf("%d ",a[i]);
return 0;
}