잘 생각해보면 별로 어렵지 않다.


#include <stdio.h>

int main()
{
int num=1;
int *p=&num;
int arr[1] = {3};
int *pArr[1] = {arr};

printf("%d\n", num);
printf("%d\t%d\n",p,*p);
printf("%d\t%d\n",arr,arr[0]);
printf("%d\t%d\t%d\t%d\n", pArr, *pArr, pArr[0], *pArr[0]);


'프로그래밍 > C' 카테고리의 다른 글

assert 매크로 사용법  (0) 2014.01.27
이중배열과 포인터 문제 하나  (0) 2013.12.01
malloc & free 기본 사용법  (0) 2013.07.23
typedef  (0) 2011.01.22
공용체와 열거체  (0) 2011.01.19
구조체  (0) 2010.10.23
배열과 포인터의 관계  (0) 2010.10.09

assert.h 파일을 포함시키면 assert를 사용할 수 있다.


기본 형태는 아래와 같이 간단하다.

assert(수식);


수식이 참인지 거짓인지 판별하여 거짓이면 assertion failed가 발생한다.


#include <stdio.h>
#include <assert.h>

int main()
{
    int a=10, b=20;

    assert(a>b);
    printf("참입니다.\n");
    return 0;


위와 같이 간단한 코드를 통해서 직접 실행해보자.


a>b는 거짓이므로 assertion failed가 발생한다.





'프로그래밍 > C' 카테고리의 다른 글

포인터에 관한 고찰  (0) 2014.10.30
이중배열과 포인터 문제 하나  (0) 2013.12.01
malloc & free 기본 사용법  (0) 2013.07.23
typedef  (0) 2011.01.22
공용체와 열거체  (0) 2011.01.19
구조체  (0) 2010.10.23
배열과 포인터의 관계  (0) 2010.10.09

 네이버 지식인에 다음 코드에 대한 질문이 있었다. 오류 원인이 뭐냐고.

#include <stdio.h>

void main()
{
int arr[2][3]={{1,2,3},{4,5,6}};
int *p;
int i;

p=arr;

for(i=0; i<sizeof(arr)/sizeof(int);i++)
{
    printf("%d \n",*(p+i));
}
}


 간단해 보여서 codepad에서 돌려보니 잘되었다. 그렇다면 질문자는 왜 안된다고 했을까. VS에서는 돌려보니 안된다.


 어찌저찌 코드는 아래와 같이 수정하여 돌아가게 하였다. 그런데 arr와 arr[0]의 주소 값은 같은데 왜 p=arr;는 안되는지 약간 의문이 들었다. codepad에서도 정상적인 결과가 나왔기 때문에 더 궁금했다.


 지인들의 답변을 듣고 깨우침을 얻었다. 역시 나는 별로 아는게 없다. ㅠㅠ


 그래서 최종적인 답변으로 아래와 같이 작성했다. 덕분에 하나 배워간다.


#include <stdio.h>

void main()
{
int arr[2][3]={{1,2,3},{4,5,6}};
//int arr2[6]={1,2,3,4,5,6};
int *p;
int i;

p=arr[0];
//printf("%d %d %d\n",arr,arr[1],arr[1][2]);
//printf("%d %d %d\n",arr,*(arr+1),*(*(arr+1)+2));


for(i=0; i<sizeof(arr)/sizeof(int);i++)
{
    printf("%d \n",*(p+i));
    //printf("%d \n",*(*(arr+1)+2));
}


주석된 부분은 배열과 포인터 관련 참고 하시라고 남겨 놓았습니다.

int arr[6];이라는 배열이 있을 때 p=arr라고 하면 arr자체가 arr의 시작점, 즉 배열의 첫번째 값인 arr[0]의 주소를 뜻합니다.
따라서 p=&arr[0] 이것도 가능합니다.

이차원배열 int arr[2][3];에서는 구조상 차이를 잘 살펴보셔야 합니다.
arr[0][0]정수(integer)형이고 arr[0]정수형 배열입니다. arr정수형 배열의 배열입니다. 따라서 정수형 포인터인 p에는 정수형 배열인 arr[0]이 대입됩니다.
p=&arr[0][0] 이것도 가능합니다. 첫번째 값의 주소이기 때문입니다.

'프로그래밍 > C' 카테고리의 다른 글

포인터에 관한 고찰  (0) 2014.10.30
assert 매크로 사용법  (0) 2014.01.27
malloc & free 기본 사용법  (0) 2013.07.23
typedef  (0) 2011.01.22
공용체와 열거체  (0) 2011.01.19
구조체  (0) 2010.10.23
배열과 포인터의 관계  (0) 2010.10.09

+ Recent posts