C:我无法显示数组的内容[CodeBlocks]

时间:2014-01-22 21:08:00

标签: c arrays pointers

我有这个代码将数组 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]);
}

3 个答案:

答案 0 :(得分:2)

a=(int*)malloc(maxLength*sizeof(short int));

这对来电者没有任何影响。在您的代码中a是一个指针,您所做的只是更改指针的本地副本。在一天结束时,main a仍然没有任何结果。此问题已在此C FAQ中得到充分讨论。


这种混淆的部分原因是隐藏atypedef后面的指针的事实。你像指针一样使用它,并依赖于它是一个指针,但你隐藏了这些信息。当调用者真正不关心实际类型是什么时,你应该只使用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;
}