为什么我不必使用指针?

时间:2016-03-02 23:29:57

标签: c arrays pointers struct

在练习中,我们有一个结构向量,我们需要反转向量的顺序。我已经解决了这个问题而没有使用指针,但我的直觉告诉我我应该已经使用过了,我不明白如何在不使用指针的情况下解决这个问题。我有点困惑,因为我现在还没有编码C一段时间。我为变量/结构名称不是英语而道歉,但是对于任何说英语的人来说,它们都非常接近并且可以理解。

typedef struct{
   char *str;    
} elemento;

typedef struct{
    int tamanho;
    int capacidade;
    elemento* elementos;   
} vetor;


void vetor_inverte(vetor *vec){

    elemento aux;
    int i=0;

    for(i=0; i<(vec->tamanho)/2; i++){
        aux = vec->elementos[i];
        vec->elementos[i] = vec->elementos[ vec->tamanho -1-i ];
        vec->elementos[ vec->tamanho -1-i ] = aux;
    }
}

2 个答案:

答案 0 :(得分:0)

假设elementos的{​​{1}}字段是vector的数组,您正在做的事情很好。您将第一个与最后一个交换,然后第二个与倒数第二个交换,依此类推。

执行交换时,它会复制elemento结构的每个字段。

我不认为在这种情况下需要涉及指针。

答案 1 :(得分:0)

你做了很多工作而不是必要,但它确实有效。

例如,让我们说你的结构是一个非常大的1000字节的结构,并且你有100个字节。然后,您的数组elementos将是1000字节块中的100,000字节连续内存。您的交换函数会将整个1000字节结构复制到aux,然后将1000字节从数组的远端复制到近端,然后将1000字节的aux复制到远端。它每次交换复制3000个字节,50次。

如果相反elementos是一个指向100个结构的指针数组(每个结构分配到其他地方,malloc()),你的交换函数只会移动24个字节50次,结构本身会保持不变在内存中,只有指向它们的指针才会移动。这样做效率更高,代价是指针数组的内存。