두 개의 2 차원 배열 (부호없는 포인터에 대한 포인터)이 있고이를 서로 바꾸려고합니다. 먼저 포인터의 1 차원 배열에 대한 코드를 작성하기 시작했습니다. 이 완벽하게 작동합니다 :C에서 2 차원 배열 (포인터로 포인터) 바꾸기
#include <stdio.h>
#include <stdlib.h>
void swap(unsigned **a, unsigned **b) {
unsigned * tmp = *a;
*a = *b;
*b = tmp;
}
int main() {
size_t x;
unsigned *a = (unsigned*) malloc(10*sizeof(unsigned));
unsigned *b = (unsigned*) malloc(10*sizeof(unsigned));
for(x=0;x<10;x++) a[x] = 1;
for(x=0;x<10;x++) b[x] = 0;
printf("%u %u\n",a[5],b[5]);
swap(&a, &b);
printf("%u %u\n",a[5],b[5]);
return 0;
}
가 나는 2 차원 배열 비슷한 작업을 수행 할 수 있습니다 생각했다.
#include <stdio.h>
#include <stdlib.h>
void swap(unsigned ***a, unsigned ***b) {
unsigned ** tmp = **a;
**a = **b;
**b = tmp;
}
int main() {
size_t x,y;
unsigned **a = (unsigned**) malloc(10*sizeof(unsigned*));
unsigned **b = (unsigned**) malloc(10*sizeof(unsigned*));
for(x=0;x<10;x++)
{
a[x] = malloc(10*sizeof(unsigned));
b[x] = malloc(10*sizeof(unsigned));
}
for(x=0;x<10;x++) for(y=0;y<10;y++) a[x][y] = 1;
for(x=0;x<10;x++) for(y=0;y<10;y++) b[x][y] = 0;
printf("%u %u\n",a[5][5],b[5][5]);
swap(&a, &b);
printf("%u %u\n",a[5][5],b[5][5]);
return 0;
}
나는 두 개의 컴파일러 경고를 가지고 : 여기 내 시도이다
$ gcc -g -Wall test.c
test.c: In function ‘swap’:
test.c:5:21: warning: initialization from incompatible pointer type [enabled by default]
test.c:7:7: warning: assignment from incompatible pointer type [enabled by default]
내가 경고를 이해하려고하지만, 난 여전히 그들을 이해하지 않습니다. 내 코드에서 무엇이 잘못되었는지 전혀 모른다. 당신의 swap
기능에
으로 변경 '서명되지 않은 ** tmp = * a; * a = * b; * b = tmp;' – BLUEPIXY