int **array = null;
int height=8,width=6;
array = (int **) malloc( sizeof(int *)* height );
for( int i=0; i < height ; i++)
    array[i] = (int *) malloc( sizeof(int)* width );


이런식으로 동적할당 하면 malloc를 height만큼 호출하기 때문에 행과 열이 나누어 진다.

memset으로 한번에 값을 지정할 수도 없고
할당된 메모리를 해제할경우 for문으로 height번만큼 해제해줘야 한다.

int **array = null;
int height=8,width=6;
array = (int **) malloc( sizeof(int *)* height);
array[0] = (int *) malloc( sizeof(int) * width*height );
for( int i=1; i< height ; i++)
    array[i] = array[ 0 ] + i*width;



조금더 고쳐보면..

int **array = null;
int height=8,width=6;
array = (int **) malloc( sizeof(int *)* height);
array[0] = (int *) malloc( sizeof(int) * width*height );
for( int i=1; i< height ; i++)
    array[i] = array[ i-1 ] + width;




Posted by Нуеоп
,

1차원 배열을 동적할당하려면 malloc()를 한번만 사용하면 된다.
2차원 배열을 동적으로 할당하려면 malloc()을 여러번 사용해야한다.

int **array = null;
int height=8,width=6;
array = (int **) malloc( sizeof(int *)* height );
for( int i=0; i < height ; i++)
    array[i] = (int *) malloc( sizeof(int)* width );



전체 소스로 보면..
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
        int **array = NULL;
        int HEIGHT = 5;
        int WIDTH = 6;
        //2차원 배열 생성 int array[6][5]
        array = (int **) malloc( sizeof(int*)*HEIGHT );
        for( int i=0; i<HEIGHT; i++) {
            array[i] = (int *) malloc( sizeof(int)*WIDTH );
        }
        //임의의 수 할당
        for( int i=0; i<HEIGHT; i++)
        for( int j=0; j<WIDTH; j++)
            array[i][j] = i*WIDTH + j + 1;
        //2차원 배열 출력
        for( int i=0; i<HEIGHT; i++){
            for( int j=0; j<WIDTH; j++){
                printf(" %2d",array[i][j]);
            }
            printf("\n");
        }
        return 0;
}

Posted by Нуеоп
,
<math.h>의 sqrt()를 사용하지 않고 제곱근을 구하는 소스
NUM_REPEAT값은 16~20 이면 충분하다.
큰수의 제곱근을 구할경우 NUM_REPEAT값을 더 큰수로 정하면 된다.

원리는 뉴튼-랩슨법을 이용한 근사값 구하기

double mysqrt(unsigned int src)
{
    unsigned int NUM_REPEAT = 16;
    unsigned int k;
    double t;
    double buf = (double)src;
    for(k=0,t=buf;k<NUM_REPEAT;k++)
    {
        if(t<1.0)
            break;
        t = (t*t+buf)/(2.0*t);
    }
    return t;
}

'c/c++' 카테고리의 다른 글

쓰레드를 이용한 행렬 곱연산  (0) 2010.09.16
c/c++ 2차원(이차원) 배열 동적할당 방법2  (0) 2010.08.06
c언어 2차원(이차원) 배열 동적 할당 방법  (0) 2010.08.03
sin 그래프  (0) 2010.07.30
중복없는 숫자 뽑기  (0) 2010.07.29
Posted by Нуеоп
,