C 질문: 변수 어드레스

A의 어드레스는 B, C와는 어떻게 틀린가요(아래와 같이 assign 안 한 상태
에서)?
코드는 792번 것을 수정했고 제 컴퓨터는 k-6 200mh에 데비안 포테이토
입니다.
792번 질문자가 A는 잘 읽어들이고 B를 읽어 들이자 마자 segmentation
fault를 일으킨다고 해서, int **A, **B, **C 상태의 값을 보니 (int로) A
만 특이하게 - 값이 더군요. 그래서 나머지 변수들도 A어드레스에서 사용
할 값만큼의 offset을 주고 ( int형 크기와 포인터형 크기가 같다는 가정
아래) 한 라인더 수정하고(잘 못사용된 ++) 컴파일 하고 실행시키니까
이 믿을 수 없는 코드가 작동하는 군요.
#include
static int i;
void print_matrix(int **);
void read_matrix(int **);
int main(){
int **A, **B=A+9, **C=A+18; /* 수정 */
puts("Input the first matrix(3*3)");
read_matrix(A);
puts("\t## A ##");
print_matrix(A);
puts("Input the second matrix(3*3)");
read_matrix(B);
puts("\t## B ##");
print_matrix(B);
for (i=0; i<9; i++)
*(int *)(C+i)=*(int *)(A+i)+*(int *)(B+i); /* 수정 */
puts("\t## C ##");
print_matrix(C);
return 0;
}
void print_matrix(int **M)
{
for (i=0; i<9; i++)
printf("%d ", *M++);
putchar('\n');
}
void read_matrix(int **M)
{
for (i=0; i<9; i++)
scanf("%d", M++);
}
댓글 달기