Ders kitabımı inceliyorum ve içinde bulunduğumuz kodun bir kısmı hakkında biraz kafam karıştı. bir kısmında, aşağıdaki şekilde işaretçi aritmetik performans:void * vs. char * işaretçi aritmetiği
void* bp;
...
bp = (void*)((char*)(bp)+16);
...
ama daha sonra onlar aşağıdakileri yapın:
void* bp;
...
bp = bp+16;
...
iki farklı şeyler olması gerektiği gibi hissediyorum ama tedavi ettikleri Aynı şeyden hoşlanır. (örneğin bir tamsayı dizisi için) bir dizi erişimi yapmak olsaydı, örneğin, bu durumda aşağıdaki
int* a = malloc(n*sizeof(int));
...
q = *(a+1);
...
yapacağını, çünkü ben önümüzdeki erişen değildir, bu şekilde hissediyorum Tamsayı dizisinde 4 bayt ve sonraki bayt değil mi? Benzer şekilde, eğer ben * a boşluğum varsa, o zaman * (a + 1) sonraki 4 bayt olmalıdır ... Ya da öyle değil mi? Teşekkür ederiz.
Bu ikinci örnek, derlememelidir. –
@OliCharlesworth: Uygun modda derlerseniz, derleme (veya en azından bir uyarı tetikler) olmaz. gcc varsayılan olarak uymuyor ve bir boşluk olarak "void *" aritmetiğini uygular. –