Может кто-нибудь объяснить, почему я могу двигаться через ячейки памяти для полукокса *, но не для междунар *, используя следующий код:C указатель арифметика отличается для полукокса * и междунар *
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
int * a = malloc(48);
char * s = malloc(27);
for (int i = 0;i<26;i++) s[i] = i+65;
int intSize = sizeof(int);
printf("%d\n",intSize);
for(int i = 0;i<12;i++){
a[i] = i;
printf("%d %d %c\n",*(a+i*intSize),a[i],*(s+i));
}
return 0;
}
Поскольку выполнение 'a + i' будет автоматически увеличивать адрес на' i * sizeof (int) '. И вы дублируете эту функцию вручную, делая ее недействительной. –
C достаточно умен, чтобы увеличивать указатель на размер типа даты, на который он указывает. Поэтому, если у вас есть 'int * p', то' p + 1' указывает на * следующий 'int' * не следующий байт. – lurker
спасибо, это правильно на деньги – DCR