2011-09-12 5 views
2

2 차원 배열에서 요소를 정렬하려고하지만이 값을 k에 할당하면이 오류가 발생합니다.경고 : 할당은 캐스팅없이 포인터에서 정수를 만듭니다

경고 : 할당은 캐스트없이 포인터에서 정수를 만듭니다.

왜 내가 문제를 해결하고 해결할 수 있습니까?

for(i=1;i<3;++i) 
    { 
     for(j=3-1;j>=1;--j) 
      { 
       if(a[j-1]>a[j]) 
        { 
         k = a[j-1]; 
          a[j-1]=a[j]; 
         a[j] = k; 
        } 
      } 
    } 
+0

i, j, a, k의 데이터 유형은 무엇입니까? –

+0

당신이 무엇을 하든지 솔루션은 ** 캐스트 **를 추가하지 않습니다! 경고가 잘못 말한 ... 나는 그것이 방금 말 했어야한다고 생각 : "경고 : 정수에 대한 포인터를 할당"단어 캐스팅을 ommiting – pmg

+0

마법의 숫자를 사용하지 마십시오 "j = 3-1" –

답변

5

요소에 액세스하는 데 하나의 색인이 누락되었습니다. a[j], a[j-1]은 모든 장소에서 a[i][j], a[i][j-1]이어야합니다. a[i]은 2D 배열에서 i 번째 행의 첫 번째 요소에 대한 포인터입니다. a[i][j]은 색인 i, j의 요소입니다.

참고 : 질문에 지정되지 않았지만 i, j, k은 정수이고 a은 2D 정수 배열임을 거의 확신합니다.

+1

+1 : 2D 배열을 1D 배열처럼 액세스하고 있습니다. 이렇게하면 배열의 요소가 아니라 포인터가됩니다. –

1

경고는 할당 문 중 하나에서 포인터에서 정수로의 안전하지 않은 변환을 둘러싼 것입니다. 그것은 당신의 코드에있는 모든 문장 일 수 있습니다. 경고의 출처를 감지하려면 변수 유형 선언을 제공해야합니다.

관련 문제