在练习中,我们有一个结构向量,我们需要反转向量的顺序。我已经解决了这个问题而没有使用指针,但我的直觉告诉我我应该已经使用过了,我不明白如何在不使用指针的情况下解决这个问题。我有点困惑,因为我现在还没有编码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;
}
}
答案 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次,结构本身会保持不变在内存中,只有指向它们的指针才会移动。这样做效率更高,代价是指针数组的内存。