2016-03-20 62 views
-7

它說:這個怎麼了? C++數組指針

[錯誤]從 '詮釋*' 的無效轉換到 '廉政'[-fpermissive]第9行山坳5.

什麼問我來做:

做一個程序,將接受數組10個整數,並確定從整數集中的最高和最低的整數。使用指針變量作爲最高和最低的整數。

我做了什麼:

#include<iostream> 
using namespace std; 
int main() 
{ 
    int kre_arr[10]; 
    int *kre_p; 
    for(int k = 0; k<=10; k++) 
     { 
      kre_p[k] = &kre_arr[k]; 
     } 
    int j,temp; 
    cout<<"Enter 10 Integers: "; 
    for (*kre_p=0; *kre_p < 10; *kre_p++) 
     { 
      cin>>kre_arr[*kre_p]; 
     } 
    for(*kre_p=0;*kre_p<=10;*kre_p++) 
     { 
      for(j=*kre_p+1;j<=10;j++) 
       { 
        if(kre_arr[*kre_p] > kre_arr[j]) 
         { 
          temp = kre_arr[*kre_p]; 
          kre_arr[*kre_p] = kre_arr[j]; 
          kre_arr[j] = temp; 
         } 
       } 
     } 
    for(*kre_p=0;*kre_p<=9;*kre_p++) 
     { 
      cout<<endl<<kre_arr[*kre_p]; 
     } 
} 

代碼添加指針之前,我做了我不似乎明白指針那麼多。

#include<iostream> 
 
using namespace std; 
 
int main() 
 
{ 
 
    int kre_arr[10]; 
 
    int *kre_p; 
 
    int i,j,temp; 
 
    cout<<"Enter 10 Integers: "; 
 
    for (int i=0; i < 10; i++) 
 
\t { 
 
    cin>>kre_arr[i]; 
 
\t } 
 
\t for(i=0;i<=10;i++) 
 
\t { 
 
    for(j=i+1;j<=10;j++) 
 
    { \t 
 
    if(kre_arr[i] > kre_arr[j]) 
 
    { 
 
     temp = kre_arr[i]; 
 
     kre_arr[i] = kre_arr[j]; 
 
     kre_arr[j] = temp; 
 
     } 
 
    } 
 
} 
 
    for(i=0;i<=9;i++) 
 
    { 
 
    cout<<endl<<kre_arr[i]; 
 
    } 
 
     } 
 
\t

+2

這是功課? – Martin

+1

'kre_p [k]'是一個整數,而不是指針。你的代碼是相當混亂的,所以很難遵循你想要做的事情 - 你想用一個指針存儲你的值,還是存儲一個指針數組? –

回答

0

看看你被要求做什麼我認爲你只需要確定數組中的最高和最低的int並指向。你排序數組更慢。

我認爲它應該看起來像:

#include<iostream> 
using namespace std; 
int main() 
{ 
    int kre_arr[10]; 
    int *low; 
    int *high; 

    cout<<"Enter 10 Integers: "; 
    for (int i=0; i < 10; i++) 
    { 
     cin>>kre_arr[i]; 
    } 

    //determine the lowest 
    low=&kre_arr[0]; 
    for(int i=1;i<10;i++) 
    { 
     if(kre_arr[i] < *low) 
     { 
      low=&kre_arr[i]; 
     } 
    } 

    //determine the highest 
    high=&kre_arr[0]; 
    for(int i=1;i<10;i++) 
    { 
     if(kre_arr[i] > *high) 
     { 
      high=&kre_arr[i]; 
     } 
    } 

    cout<<"lowest: "<<*low<<"\nhighest: "<<*high; 
} 
+0

我從來沒有這樣想過,謝謝。它說,決定不降序,我誤解了它,fek我的生活。 –

0

kre_p [K] = & kre_arr [K];

kre_arr是數組。

kre_arr [k]是整數。

& kre_arr [k]爲整數地址(類似於INT *)

kre_p是指針。

kre_p [k]是整數。

因此,你不能直接將int *傳遞給int。 我想你想kre_p + k = & kre_arr [k]

+0

如果沒有至少解決內存分配的問題,'kre_p + k =&kre_arr [k]'似乎也不是一個好主意。 –

0

鑑於你的代碼的狀態,我擔心你的生活......所以,爲了你的整體生存,當然希望你會學習東西:

  • 不要使用'using namespace std'。這是糟糕的形式。

  • 您沒有爲指針數組(kre_p)分配內存。這會導致你的程序肯定崩潰。

  • 你實際上並不需要需要一個指針數組。您的數組元素可以通過它們在數組中的偏移量方便地引用。

  • 您正在做什麼似乎是一個泡沫找到最低和最高價值。這非常低效,完全沒有必要。

C++可以是一個很好的語言。當老師們認爲他們應該以儘可能醜陋的形式教學時,這讓我感到困擾。考慮:

#include <algorithm> 
#include <array> 
#include <iostream> 

int main() { 
    std::cout << "Enter 10 Integers: "; 

    std::array<int, 10> kre_arr; 
    for (auto &Val : kre_arr) 
     std::cin >> Val; 

    const int Low = *std::min_element (kre_arr.begin(), kre_arr.end()); 
    const int High = *std::max_element (kre_arr.begin(), kre_arr.end()); 

    // The assignment calls for pointers, so let's not disappoint. 

    const int *LowPtr = &Low; 
    const int *HighPtr = &High; 
} 
+0

大聲笑,我知道我吮吸在它,但ty如何我在編程方面的反饋意見。 –

+0

嘿,所有的意思都很好!當我剛開始的時候,我對它不屑一顧。二十多年努力變得更好確實有所作爲......無論如何,你確實提到了對你生命的威脅;-) –