CodeInside
@CodeInside

Почему выводятся адреса, а не значения?

int main(int argc, char* argv[])
{
	int npa[10],i=0;
	int *a = npa;

	for( ; i<10 ; i++)//инициализация массива "парными" числами
	{
		*(a++) = 2*i;
	}

	*(a-i);//перевести указатель на первый эллемент

	for( i=0; i<10 ; i++)//вывод эллементов массива
	{
		printf("%d ",*a);
		*(a++);
	}

 system("pause");
return 0;
}

Ещё вопрос: компилятор пишет " 'system' не является однозначным" и ссылает этот ексепшн на 3 строку с конца (system("pause")), но всё-равно выполняет программу. К чему бы это?
  • Вопрос задан
  • 1385 просмотров
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C++
Я думаю там выводится мусор, а не адреса - с чего вы взяли, что там адреса? Они последовательно идут? Я не думаю.

*(a-i);//перевести указатель на первый эллемент


Не, тут не произойдет то что вы пишете. Здесь нет операции присвоения или аналогичной ей. Это просто выражение, результат вычисления которого уйдет в никуда. Совершенно непонятно, зачем вы еще и разыменование поставили. Вы вообще понимаете, что написали там?
Вам нужно что-то вроде этого: a = npa; или a -= i;
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Ваша строчка "перевести указатель на первый элемент" вообще какая-то страшная. Она не делает ничего, указатель "а" продолжает указывать на память после последнего элемента массива и потом выводится мусор, который там есть. Замените указанную строчку, например, на "а-=i" и будет вам счастье
Ответ написан
heksen
@heksen
printf("%d ",*a); /* Вывод указателя? пробуйте разадресацию или взятие адреса */
Ответ написан
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
Неправильно
*(a-i); //перевести указатель на первый эллемент
Чуть более правильно
a = a-i; //перевести указатель на первый элемент
или
a = a - 10; //перевести указатель на первый элемент

Совсем правильно
a = npa; //перевести указатель на первый элемент

ну и потом еще можно так сделать:
int npa[10];

for(int i=0; i<10 ; i++)//инициализация массива "парными" числами
	npa[i] = 2*i;

for(int i=0; i<10 ; i++) //вывод эллементов массива
	printf("%d ",npa[i]);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽