как напечатать строку массива с указателями

#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];
  

ideone

/// редактировать ///

если вы не можете использовать цикл и рекурсию, вы можете сделать это

 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;
}