#c #arrays #pointers
#c #массивы #указатели
Вопрос:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
ifstream fin("C:\Users\rati\Desktop\iris_flower.txt");
float s=0;
int x,n=5,m=150,i,j;float d[5]={0};
float **iris;
float ss=n;
iris=new float *[n];
for(i=0;i<n;i )
iris[i]=new float [m];
for(i=0;i<n;i )
for(j=0;j<m;j )
fin>> iris[i][j];
for(i=0;i<n;i ){
for(j=0;j<m;j )
cout<<iris[i][j]<<" ";
cout<<endl;
}
for(j=0;j<m;j ){
for(i=0;i<n;i )
s =iris[i][j];
d[j] =s/ss;
cout<<s<<endl;
}
system ("pause");
}
это мой полный код. Я хочу напечатать строку из 2d-массива с указателем (без циклов).Я надеюсь, вы можете написать фрагмент, чтобы добавить, что он сделал то, что я хочу
Комментарии:
1. Массивы имеют индексы на основе нуля, поэтому выводится 6-я строка, а не 5-я.
2. Поэтому используйте рекурсию, подобную @Captain Obvlious
Ответ №1:
Вы можете модифицировать массив с помощью указателей, но если вы хотите распечатать массив, вам придется использовать циклы.
Посмотрите на этот пример:-
int main() {
int n = 3, m = 4, a[n][m], i, j, (* p)[m] = a;
for (i = 0; i < n; i )
for (j = 0; j < m; j )
a[i][j] = 1;
p ;
(*p)[2] = 9;
return 0;}
Здесь
p
является указателем на 4-элементный int
массив (т.е. указатель на указатель на int
, где первое измерение равно 4, а второе неизвестно). При увеличении p
это указывает на следующий int
массив из 4 элементов, то есть на пятый int
в целом. Затем p
разыменовывается со смещением 2, что означает, что седьмой int
изменяется, так что вы получаете
1 1 1 1
1 1 9 1
1 1 1 1
Для преобразования целочисленного массива, на который указывает p, в строку попробуйте следующее :-
string int_array_to_string(int *p, int size_of_array){
string returnstring = "";
for (int temp = 0; temp < size_of_array; temp )
returnstring = itoa((* p)[temp]);
return returnstring;
}
Отсюда вы получаете массив строк.
Комментарии:
1. Я знаю, но домашнее задание — напечатать строку с указателем, я просматривал Google, но ответов нет : ((
2. В Java 5 Arrays.toString(arr) или Arrays.deepToString(arr) для массивов внутри массивов. и добавьте примечание, что Object[] version вызывает .toString() каждого объекта в массиве. Используйте import java.util. Массивы;
Ответ №2:
С массивом целых чисел это не будет так просто, как с массивом символов.
int n=10, m=10;
int width, height;
char **tab = new char*[n];
for (int x = 0; x < n; x ) {
tab[x] = new char[m];
}
for(int i=0;i<n;i )
for(int j=0;j<m;j )
tab[i][j] = rand()%10 '0';
for (int i=0; i<n; i ) { for(int j=0; j<n; j ) cout << tab[i][j]; cout << endl; }
cout << endl;
cout << tab[5];
/// редактировать ///
если вы не можете использовать цикл и рекурсию, вы можете сделать это
const int n=3;
float *k =new float [n];
k[0]=6.123;
k[1]=9.5345;
k[2]=1.32423;
int i=0;
label:
if(i<n){
cout << *(k i) << " ";
i ;
goto label;
}