В чем разница между a[1] и b[1]?
Я учу с указателями. я узнал, что само имя массива является указателем.
int a[5]={ 1 , 2 , 3 , 4 , 5 };
int *b = &a;
Мое понимание:
a [5] -> a содержит базовый адрес
рассмотрим a в местоположении 0x100, поэтому a[5] = 0x100 + ( 5 * size_of_integer) = 0x100 + ( 5 * 4) = 0x100 + ( 20) = 0x120b = &a; // b = 0x100 b[0] = 0x100 b[1] = 0x104
есть ли разница между a [0] и b[0]? (я новичок, я могу ошибаться)
3 ответа
a
является int a[5]
массив. a
указывает на первое (a[0]
) элемент. b
это указатель на a
, Вы можете проверить это, используя код ниже:
#include <stdio.h>
int main()
{
int a[5] = {1, 2, 3, 4, 5};
int *b = &a;
printf("a %p\n", a); // (1) address of a array.
printf("a[0] %p\n", &a[0]); // (2) address of first element of a array
printf("b %p\n", b); // (3) address of b
printf("b[2] %p\n", &b[2]); // (4) means [address of b] + 2 * sizeof(int)
printf("a[2] %p\n", &a[2]); // (5) third element of array
return 0;
}
(1) = (2) = (3) и (4) = (5)
Также b[0] = 1
не обращаться (0x100
как в вашем примере) и b[1] = 2
,
printf("b[0] %d\n", &b[0]);
printf("b[1] %d\n", &b[1]);
msgstr " я узнал, что само имя массива является пуантом ". Никакое имя массива само по себе не является указателем, если оно было указателем того, как оно содержит 5 или более целых чисел. " имя массива" само по себе является константным указателем. поэтому мы не можем выполнить ++. если это был указатель, как вы написали, вы можете выполнить ++, что невозможно.
int a [5] = {1, 2, 3, 4, 5}; int * b = & a;
давайте сравним [2] и b [2], сначала расширим [2].
as a[i] = *(a + i)
a[2] = *(0x100 +2 * 4)
= *(0x108)
= 3
Теперь рассмотрим b [2], давайте расширим его.
b[2] = *(b + 2)
= *(0x100 +2 * 4) = *(0x108)
= 3
выходной здесь то же самое, но оба отличаются как
a++ ; // not possible
b++ ; // possible
a содержит базовый адрес и &a содержит адрес местоположения, где хранится этот базовый адрес.
Я имею в виду Значение дает вам базовый адрес. если вы используете b = &a (это назначит адрес местоположения, в котором хранится базовый адрес) и b=a (присвойте значение a (которое является базовым адресом массива) в b), так что если вы используете b = a, то b[0] = a[0] в противном случае оба они различны.
Надеюсь, это поможет вам..