게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C 언어 배열과 포인터 질문 하겠습니다.
게시물ID : programmer_3372짧은주소 복사하기
작성자 : ISEWOLI
추천 : 0
조회수 : 476회
댓글수 : 3개
등록시간 : 2014/05/19 17:58:31
안녕하세요. 프로젝트 하다가 막히는게 있어서 이렇게 질문 드립니다. 

이미지를 나타내는 함수가 있다고 하죠. 하지만 이미지의 픽셀 사이즈(행 과 열)는 이미지를 넣기 전에 알수 없음으로,
malloc 함수를 사용하여 변수 float ** m 과 float *v 를 힙 영역에 넣어 두는건 이해하겠습니다.
처음에 m 이 가지는 값은 주소값이 되겠네요 더블포인터 플롯 형 이고요, row * sizeof(float *) 만큼의 바이트를 가지겠네요. (이 것을 그림으로 표현 하였을때 row 개의 박스(일차원 배열로)가 만들어 진다고 가정하고 하나의 row 박스에는 float * 형 주소들이 들어 온다고 하죠 ) 

그다음 이해가 가지 않는 부분은 왜 변수 float * v 를 정의할때 말록 함수 안에 바이트 크기가 rows * cols * sizeof(float) 인가요?
제 생각은 그냥 rows 없이 cols * sizeof(float) 이 되어야 할것 같은데요... 그래야 2차원 배열이 만들어 지지 않나요?

다른 또 하나는, v+= cols; 이 부분은 포인터 연산 부분 같은데 *(v+cols) 랑 동일한 문장인가요?

/* Allocate memory for a 2D float matrix of size [row,col].  This returns
     a vector of pointers to the rows of the matrix, so that routines
     can operate on this without knowing the dimensions.
*/
float **AllocMatrix(int rows, int cols)
{
    int i;
    float **m, *v;

    m = (float **) malloc(rows * sizeof(float *));
    v = (float *) malloc(rows * cols * sizeof(float));          <---------
    for (i = 0; i < rows; i++) {
m[i] = v;
v += cols;     <---------
    }
    return (m);
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호