Member 13587774 Ответов: 2

В соответствии с концептуальным пониманием указатель указывает на ячейку памяти после увеличения массива на 12 байт в компиляторе gcc.


#include<stdio.h>
int main()
{
	int a[3]={1,2,3};
	int *p;
	p=&a+2;
	*p=50;

	printf("p = %d\n",p);

	printf("*p = %u\n",*p);

	printf("z = %u\n",&a+1);

	printf("y = %u\n",*(&a+1));

	}


Что я уже пробовал:

Я получаю выходные данные в определенной области памяти только с помощью двойного указателя. Почему я не могу получить значение с помощью одного указателя. Я получаю значение на *p, но не могу получить то же самое значение, используя *(&a+1).пожалуйста, помогите.

2 Ответов

Рейтинг:
2

Jochen Arndt

Компилятор показывает

warning: assignment from incompatible pointer type
для линии
p=&a+2;
Это потому что a является массивом и, следовательно, уже является int* указатель.

Так и должно быть
p = a + 2;
// or
p = &a[2];
и то же самое в printf звонки.


Рейтинг:
1

CPallini

Всегда компилируйте с помощью -Wall переключатель.
По сути дела GCC предупреждает о

Цитата:
p=&a+2;
Это должно быть вместо этого
p = a + 2;

Попробуй
#include <stdio.h>

int main()
{
  int a[3]={1,2,3};
  int *p;
  p=(a+2);
  *p=50;

  int n=0;

  for (n=0; n<3; ++n)
    printf("at address %p value is %d\n", (a+n), *(a+n));

  return 0;
}