繁体   English   中英

为什么我不必使用指针?

[英]Why don't I have to use pointers?

在练习中,我们有一个结构向量,我们需要反转向量的顺序。 我不用h使用指针就解决了这个问题,但是我的直觉告诉我那时我应该使用指针,而且我不了解如果不使用指针怎么解决这个问题。 我有点困惑,因为我已经有一段时间没有编码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;
    }
}

假设vectorelementos字段是elemento的数组,那么您所做的就很好。 您将第一个与最后一个交换,然后将第二个与倒数第二交换,依此类推。

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

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

您所做的工作比必要的要多得多,但是可以。

例如,假设您的结构是一个非常大的结构,具有1000个字节,并且其中有100个字节。 这样,您的数组elementos将是100,000字节的连续内存(以1000字节为块)。 您的交换函数会将整个1000字节的结构复制到aux ,然后从数组的远端将1000字节复制到近端,然后将aux 1000字节复制到远端。 每次交换复制3000字节,即50次。

相反,如果elementos是指向100个结构的指针的数组(每个结构都使用malloc()分配到其他位置),则交换函数将仅移动24个字节50次,这些结构本身将保留在内存中,并且仅指向它们的指针会移动。 这要高效得多,但要消耗指针数组的内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM