#c #arrays #pointers #multidimensional-array
#c #массивы #указатели #многомерный массив
Вопрос:
я изучаю c и только что добрался до указателей, и после прочтения о я начал практиковаться в этом, и я застрял на многомерном массиве и указателях. проблема, на которой я застрял, заключается в том, что моя программа не печатает элементы 2-го массива, это также выдает некоторые ошибки, я пытался найти решение, но не могу его найти, у меня есть общая фотография моей программы, вы можете посмотреть на нее, ссылка ниже
введите описание изображения здесь
спасибо
Комментарии:
1.
ptrarr
является указателем наint
,*ptrarr
являетсяint
и**ptrarr
не имеет смысла, почему вы дважды разыменовываете?2. я зашел на многие веб-сайты, и это показало мне то же самое. пожалуйста, скажите, как это исправить
3. Пожалуйста, отредактируйте свой вопрос, удалите изображение вашего кода и вставьте свой код в виде текста в свой вопрос.
4. подождите, я сделаю то же самое
Ответ №1:
Это ваш код
#include <iostream>
using namespace std;
int main()
{
int arr[2][3];
arr[0][0]=1;
arr[0][1]=8;
arr[0][2] = 4;
arr[1][0]=3;
arr[1][1] = 6;
arr[1][2] = 54;
int* ptrarr=amp;arr[0][0];
cout<<*(*(ptrarr 1) 1);
return 0;
}
Что, по сути, вы делаете, так это присваиваете ptrarr
адрес arr[0][0]
. В cout
инструкции ptrarr
адрес увеличивается на arr[0][1]
, затем откладывается (выводится значение этого адреса), которое является 8 (arr[0][1]=8)
, а затем вы снова разыменовываете его, что ничего не значит, поскольку теперь у вас есть значение, а не адрес.
Это может решить вашу ошибку
#include <iostream>
using namespace std;
int main()
{
int arr[2][3];
arr[0][0]=1;
arr[0][1]=8;
arr[0][2] = 4;
arr[1][0]=3;
arr[1][1] = 6;
arr[1][2] = 54;
int* ptrarr=amp;arr[0][0];
cout<<*(ptrarr (rowNumber*COL) colNumber));
return 0;
}
Где rownumber
и colnumber
— позиция, к которой вы хотите получить доступ, а COL
— общее количество столбцов. В вашем случае это так 3
.
Итак, если вы хотите вывести, arr[1][2]
вы сделаете
cout<<*(ptr (1*3) 2);
Комментарии:
1. сэр, но я хочу значение из второго массива
2. Какой результат вы на самом деле ожидаете?
3. результат, который я ожидаю, равен 54
4. Теперь я отредактировал ответ. Теперь это будет работать. Для получения выходных данных как
54
,cout<<*(ptrarr (1*3) 2)
поскольку они находятся в arr[1][2]5. не могли бы вы, пожалуйста, объяснить, что это значит?? это будет полезно