cheoly's language study blog

C언어 포인터, 동적할당, 메모리 관리

프로그래밍/C언어
반응형
SMALL

오늘은 C언어 포인터에 대해 알아보겠습니다. 포인터란 무엇일까요? 포인터는 메모리의 주소를 저장하는 변수로, 메모리 관리를 효율적으로 할 수 있게 도와줍니다. 특히, 동적 메모리 할당을 통해 프로그램의 메모리 사용을 최적화할 수 있습니다.

 

C언어 포인터의 개념

C언어에서 포인터는 변수의 주소를 가리키는 변수입니다. 포인터를 사용하면 메모리의 특정 위치에 직접 접근할 수 있어, 데이터 구조를 효율적으로 관리할 수 있습니다. 포인터는 메모리의 주소를 저장하므로, 메모리의 내용을 직접 수정하거나 읽을 수 있는 강력한 도구입니다.


메모리 관리의 중요성

메모리 관리는 프로그램의 성능과 안정성에 큰 영향을 미칩니다. 메모리를 효율적으로 관리하지 않으면, 프로그램이 비정상적으로 종료되거나, 메모리 누수와 같은 문제가 발생할 수 있습니다. 따라서, C언어에서는 malloc과 free 함수를 사용하여 동적 메모리를 할당하고 해제하는 것이 중요합니다.


malloc 함수의 사용법

malloc 함수는 메모리를 동적으로 할당하는 데 사용됩니다. 이 함수는 요청한 크기만큼의 메모리를 할당하고, 그 시작 주소를 반환합니다. 예를 들어, 다음과 같은 코드로 메모리를 할당할 수 있습니다.


int *arr;
arr = (int *)malloc(sizeof(int) * N);

위 코드에서 N은 배열의 크기를 나타내며, malloc 함수는 N개의 정수를 저장할 수 있는 메모리를 할당합니다. 메모리 할당이 성공하면, arr 포인터는 할당된 메모리의 시작 주소를 가리키게 됩니다.

 

free 함수의 사용법

할당한 메모리는 사용이 끝난 후 반드시 해제해야 합니다. 이를 위해 free 함수를 사용합니다. free 함수는 포인터가 가리키는 메모리를 해제하고, 해당 메모리를 다시 사용할 수 있도록 합니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

c
free(arr);
arr = NULL; // 포인터를 NULL로 초기화

이렇게 하면 메모리 해제가 완료되고, 포인터를 NULL로 초기화하여 잘못된 메모리 접근을 방지할 수 있습니다.

메모리 해제를 하지 않았을 때의 문제
메모리 해제를 하지 않으면 메모리 누수가 발생할 수 있습니다. 메모리 누수란, 프로그램이 사용한 메모리를 해제하지 않아 점점 메모리가 부족해지는 현상입니다. 이로 인해 프로그램이 느려지거나, 심지어 시스템이 다운될 수도 있습니다.

 

메모리 누수 방지 방법

메모리 누수를 방지하기 위해서는 다음과 같은 방법을 사용할 수 있습니다.

동적 메모리 할당 후 즉시 해제하기
메모리 해제를 잊지 않기
메모리 사용이 끝난 후 포인터를 NULL로 초기화하기
이러한 방법을 통해 메모리 누수를 예방할 수 있습니다.

실제 코드 예제
아래는 학생의 점수를 입력받아 평균을 계산하는 간단한 프로그램입니다. 이 프로그램에서는 동적 메모리를 사용하여 점수를 저장합니다.

c
#include <stdio.h>
int main()

위 코드는 학생 수를 입력받고, 각 학생의 점수를 입력받아 총 점수와 평균 점수를 출력합니다.

 

마무리 및 추가 자료


C언어에서 포인터와 메모리 관리는 매우 중요한 개념입니다. malloc과 free를 적절히 사용하여 메모리를 관리하면, 프로그램의 성능을 높이고 안정성을 유지할 수 있습니다. 더 자세한 내용은 아래의 링크를 참고해 보세요.
https://dafher-diary.tistory.com/16

 

POCU C언어 정주행 14회차 - malloc과 free, 메모리 함수, 메모리 관리 기법

1. malloc과 free 이번 글은 강의에서 동적 할당에 대해 다룬 것들 중에서 내가 몰랐던 것들을 위주로 적어보려고 한다. 따라서 malloc, calloc, free함수의 사용법이나 어떤 역할을 하는지에 대한 내용은

dafher-diary.tistory.com

https://nunbu.tistory.com/157

 

[C언어] C언어 개발시 메모리 누수 오류의 원인과 방지 방법

[C언어] C언어 개발시 메모리 누수 오류의 원인과 방지 방법 C언어로 리눅스 코어뱅킹 은행 시스템을 개발하다 보면 메모리 누수 오류는 흔하게 발생하는 문제 중 하나입니다. 메모리 누수 오류

nunbu.tistory.com

 

https://velog.io/@mjung/%EB%8F%99%EC%A0%81-%EB%A9%94%EB%AA%A8%EB%A6%AC-%ED%95%A0%EB%8B%B9malloc%EA%B3%BC-%ED%95%A0%EB%8B%B9%ED%95%B4%EC%A0%9Cfree-%EC%A0%95%EB%A6%AC

 

동적 메모리 할당(malloc)과 할당해제(free) 정리

ft_lstdelone 함수 main 부분을 짜던 중 자꾸 버그가 난다.해결을 위해 이것저것 만져보던 도중, 지금 직면한 문제와 시도하는 방법들이 정확히 모른 채 고치기에만 급급해 있다는 것을 느꼈다.현재

velog.io

 

이제 C언어의 포인터와 메모리 관리에 대해 좀 더 이해가 깊어지셨길 바랍니다. 포인터를 잘 활용하여 효율적인 프로그래밍을 해보세요!

반응형
LIST

C언어 구조체란?

프로그래밍/C언어
반응형
SMALL

이번 포스팅에서는 C언어의 구조체에 대해 자세히 알아보려고 해요. 구조체는 여러 자료형을 하나로 묶어 사용할 수 있는 강력한 도구인데요, 이를 통해 데이터의 관리와 조작이 훨씬 수월해진답니다. 그럼 하나씩 살펴볼까요?

C언어 구조체란?
구조체는 여러 개의 서로 다른 자료형을 하나의 단위로 묶어서 사용할 수 있도록 정의한 사용자 정의 자료형이에요. 예를 들어, 학생의 정보를 저장할 때 이름, 나이, 성별, 학번 등을 각각의 변수로 저장하는 대신, 구조체를 사용하면 이 모든 정보를 하나의 구조체로 묶을 수 있어요.

구조체의 정의 및 사용법
구조체를 정의할 때는 struct 키워드를 사용해요. 다음은 구조체를 정의하는 기본적인 방법이에요:

c
struct Student

이렇게 정의한 후, 구조체 변수를 인자로 넘겨주면 해당 학생의 정보를 출력할 수 있어요.

구조체 포인터
구조체 포인터를 사용하면 메모리 효율성을 높일 수 있어요. 구조체의 주소를 저장하고, 이를 통해 구조체의 멤버에 접근할 수 있답니다. 예를 들어:

c
struct Student *ptr = &student1;
printf("Name: %s\n", ptr->name);

위와 같이 -> 연산자를 사용하면 포인터를 통해 구조체의 멤버에 접근할 수 있어요.

구조체의 장점과 단점
구조체의 가장 큰 장점은 관련된 데이터를 하나의 단위로 묶어 관리할 수 있다는 점이에요. 이를 통해 코드의 가독성이 높아지고, 데이터 관리가 용이해져요. 하지만 단점으로는 구조체의 크기가 커질 수 있고, 복사할 때 성능 저하가 발생할 수 있다는 점이 있어요.

마무리 및 추가 자료
C언어의 구조체는 데이터 관리를 효율적으로 할 수 있는 강력한 도구예요. 다양한 자료형을 묶어 사용할 수 있어 프로그래밍의 유연성을 높여준답니다. 더 많은 예제와 자료는 아래 링크에서 확인해보세요!

 

https://blog.naver.com/highkrs/220184227321

 

[C언어 강의29] 구조체 사용법 (struct)

안녕하세요. 모프 입니다.   오늘은 C언어의 구조체에 대하여 설명해보도록 하겠습니다.  ...

blog.naver.com

https://studyc.tistory.com/23

 

초보자를 위한 기초 C 언어 강좌 #19 : 구조체

본 강좌는 아래 동영상 강좌와 같이 진행됩니다. 되도록이면 동영상과 같이 보시는 것을 추천합니다. 유튜브 채널 가기 강좌 19편 동영상 보기 이번시간에는 여러 자료형을 묶어 하나로 사용할

studyc.tistory.com

https://coding-factory.tistory.com/639

 

[C언어/C++] 구조체 사용법 & 예제 총정리

구조체란? 구조체란 하나 이상의 변수를 묶어 그룹화하는 사용자 정의 자료형입니다. 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입이며 기본 타입만으로는 나

coding-factory.tistory.com

 

반응형
LIST

자료구조 연결리스트 개념, 장점, 단점, 배열과의 차이

프로그래밍/C언어
반응형
SMALL

연결리스트는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조입니다.
각 노드는 다음 노드를 가리키는 포인터를 포함합니다.
다음 노드를 가리키는 포인터는 다음 노드의 주소를 값으로 가지고 있습니다.
각 노드의 포인터 변수는 다음 노드의 데이터의 주소를 값으로 가진다.
또한 각 포인터 변수의 주소도 따로 존재한다.

연결 리스트의 종류로는 단일 연결 리스트, 이중 연결 리스트 등이 있습니다.
연결 리스트는 늘어선 노드의 중간지점에서도 자료의 추가와 삭제가 O(1)의 시간에 가능하다는 장점을 갖습니다.
그러나 배열이나 트리 구조와는 달리 특정 위치의 데이터를 검색해 내는데에는 O(n)의 시간이 걸리는 단점도 갖고 있습니다.

연결 리스트는 다음과 같은 장점과 단점을 가지고 있습니다.

* 장점
    * 데이터의 추가와 삭제가 용이하다.
    * 데이터의 삽입과 삭제가 배열보다 빠르다.
    * 데이터의 중복이 없다.

* 단점
    * 데이터의 검색이 느리다.
    * 메모리 공간이 많이 필요하다.
    * 데이터의 순서가 중요하다.

연결 리스트는 다음과 같은 분야에서 사용됩니다.

##스택
    * 스택은 데이터를 쌓아 올리는 자료 구조입니다.
    * 연결 리스트는 스택의 데이터를 추가하고 삭제하는 데 사용됩니다.

##큐
    * 큐는 데이터를 줄을 서서 기다리는 자료 구조입니다.
    * 연결 리스트는 큐의 데이터를 추가하고 삭제하는 데 사용됩니다.

##연결 리스트
    * 연결 리스트는 데이터를 한 줄로 연결한 자료 구조입니다.
    * 연결 리스트는 데이터의 추가와 삭제가 용이합니다.

연결 리스트는 데이터의 추가와 삭제가 용이한 자료 구조입니다.
그러나 데이터의 검색이 느리다는 단점이 있습니다.
연결 리스트는 스택, 큐와 같은 자료 구조를 구현하는 데 사용됩니다.

##연결리스트 예시

```
1 -> 2 -> 3 -> 4 -> 5
```

이 연결리스트는 1, 2, 3, 4, 5의 데이터를 저장하고 있습니다. 1은 첫 번째 노드이고, 5는 마지막 노드입니다. 2는 1의 다음 노드이고, 3은 2의 다음 노드입니다. 4는 3의 다음 노드이고, 5는 4의 다음 노드입니다.

연결리스트는 배열과 비교하여 다음과 같은 장점이 있습니다.

* 데이터의 삽입과 삭제가 쉽다.
* 데이터의 크기가 가변적이다.

연결리스트는 배열과 비교하여 다음과 같은 단점이 있습니다.

* 데이터의 접근이 느리다.
* 데이터의 저장 공간이 많이 필요하다.

연결리스트는 배열과 비교하여 다음과 같은 용도로 사용됩니다.

* 데이터의 삽입과 삭제가 빈번한 경우
* 데이터의 크기가 가변적인 경우

연결리스트는 배열과 비교하여 다음과 같은 용도로 사용되지 않습니다.

* 데이터의 접근이 빈번한 경우
* 데이터의 저장 공간이 적은 경우

반응형
LIST

자료구조 스택과 큐의 개념과 차이

프로그래밍/C언어
반응형
SMALL

자료구조는 컴퓨터 프로그램에서 데이터를 저장하고 관리하는 방법입니다. 스택과 큐는 자료구조의 두 가지 기본적인 유형입니다.

* **스택**


스택은 후입선출(LIFO) 구조를 가지고 있습니다. 즉, 가장 마지막에 삽입된 데이터가 가장 먼저 삭제됩니다.
스택은 웹 브라우저의 뒤로 가기 버튼, 수식 계산기의 undo 기능, 프로그래밍 언어의 함수 호출 및 반환에 사용됩니다.

스택은 데이터를 빠르게 삽입 및 삭제할 수 있습니다.
스택은 데이터를 삽입할 때는 가장 마지막에 데이터를 삽입하고, 데이터를 삭제할 때는 가장 마지막에 삽입된 데이터를 삭제합니다.
따라서 스택은 데이터를 빠르게 삽입 및 삭제할 수 있습니다.

그러나 스택은 데이터에 대한 랜덤 액세스가 불가능합니다.
랜덤 액세스란 데이터의 위치에 관계없이 데이터에 접근하는 것을 말합니다.
스택은 데이터를 삽입 및 삭제할 때는 가장 마지막에 삽입된 데이터에만 접근할 수 있습니다.
따라서 스택은 데이터에 대한 랜덤 액세스가 불가능합니다.

* **큐**


큐는 선입선출(FIFO) 구조를 가지고 있습니다. 즉, 가장 먼저 삽입된 데이터가 가장 먼저 삭제됩니다.
큐는 프린터의 인쇄 대기열, 은행의 대기열, 운영 체제의 프로세스 스케줄링에 사용됩니다.

큐는 데이터에 대한 랜덤 액세스가 가능합니다.
큐는 데이터를 삽입할 때는 가장 앞에 데이터를 삽입하고, 데이터를 삭제할 때는 가장 앞에 삽입된 데이터를 삭제합니다.
따라서 큐는 데이터에 대한 랜덤 액세스가 가능합니다.

그러나 큐는 데이터를 빠르게 삽입 및 삭제할 수 없습니다.
큐는 데이터를 삽입할 때는 가장 앞에 데이터를 삽입하고, 데이터를 삭제할 때는 가장 앞에 삽입된 데이터를 삭제합니다.
따라서 큐는 데이터를 빠르게 삽입 및 삭제할 수 없습니다.

스택과 큐는 모두 자료구조의 기본적인 유형이지만, 서로 다른 특징을 가지고 있습니다.
스택은 데이터를 빠르게 삽입 및 삭제할 수 있지만, 데이터에 대한 랜덤 액세스가 불가능합니다. 큐는 데이터에 대한 랜덤 액세스가 가능하지만, 데이터를 빠르게 삽입 및 삭제할 수 없습니다.

스택과 큐는 컴퓨터 프로그램에서 다양한 용도로 사용됩니다.
스택은 데이터를 빠르게 삽입 및 삭제해야 하는 경우에 적합하고, 큐는 데이터에 대한 랜덤 액세스가 필요한 경우에 적합합니다.

반응형
LIST

C 언어 함수 이해하기: 효율적인 프로그래밍을 위한 종합 가이드

프로그래밍/C언어
반응형
SMALL

C 프로그래밍은 다재다능한 기능인 함수 덕분에 강력하고 접근 가능합니다. 이 포괄적인 가이드에서는 효율적이고 잘 구성된 코드를 작성할 수 있는 지식과 기술을 제공하여 C 언어 함수를 설명합니다. 초보자이든 숙련된 프로그래머이든 이 게시물은 C 함수의 복잡성을 풀어 프로그래밍 여정에서 쉽게 이해하고 적용할 수 있도록 합니다.

  1. C 함수의 기본 이해: C 함수의 기본 개념을 파악하여 여정을 시작하십시오. 함수의 구문, 구조 및 목적을 다루고 함수가 코드 구성 및 재사용성을 향상시키는 방법에 대해 논의합니다. 또한 C 프로그램의 시작점으로서 main() 함수의 역할을 탐색합니다.
  2. 함수 매개변수 및 인수 단순화: C에서 함수 매개변수와 인수의 세계를 이해하십시오. 다양한 유형의 매개변수를 단순화하고 값에 의한 전달 및 참조에 의한 전달 개념을 탐구합니다. 함수 인수를 이해하면 입력을 제공하고 함수 내에서 효과적으로 데이터를 조작할 수 있습니다.
  3. 반환 값 및 함수 출력이 쉬워짐: C 함수에서 반환 값의 힘을 잠금 해제하십시오. 반환 유형, 반환 문 및 함수에서 값 검색에 대해 설명합니다. 포인터와 구조를 사용하여 여러 반환 값을 얻는 기술을 발견하여 다양한 출력을 생성하는 능력을 확장합니다.
  4. 빌딩 블록: 기능 프로토타입 및 모듈성: 함수 프로토타입을 사용하여 모듈식 프로그램을 구축하는 방법을 배웁니다. 전방 선언, 함수 서명의 중요성과 이들이 코드 구성에 기여하는 방식을 분석합니다. 모듈식 프로그래밍 기술을 채택하면 코드 재사용성과 유지 관리성이 향상됩니다.
  5. 함수 라이브러리 및 헤더 파일 단순화: C 프로그래밍에서 함수 라이브러리 및 헤더 파일의 단순성을 발견하십시오. 여러 프로그램에서 코드 재사용을 위해 고유한 라이브러리를 만들고 헤더 파일을 활용하는 과정을 안내합니다. 이러한 도구를 활용하면 프로그래밍 작업 흐름을 간소화하고 보다 효율적인 애플리케이션을 구축할 수 있습니다.
  6. 재귀 함수의 힘 공개: C에서 재귀 함수의 잠재력을 잠금 해제합니다. 재귀를 이해하고 복잡한 문제를 해결하기 위해 함수가 자신을 호출하는 방법을 설명합니다. 기본 사례, 재귀 호출 및 메모리 관리에 대해 알아보고 강력한 문제 해결 기술을 갖추십시오.
  7. 함수 포인터 탐색: C 프로그래밍에서 함수 포인터와 해당 응용 프로그램을 이해하기 쉽게 설명합니다. 동적 함수 선택 및 호출을 포함하여 함수 포인터의 개념을 단순화합니다. 함수 포인터를 인수로 정의, 할당 및 전달하는 방법을 알아보고 고급 프로그래밍 기술의 문을 엽니다.
  8. 코드 최적화: 모범 사례 및 기법: 모범 사례와 기술로 C 기능을 최적화하십시오. 매개변수 전달, 변수 범위 지정, 코드 가독성 및 성능 고려 사항을 안내해 드립니다. 인라인 및 루프 언롤링과 같은 최적화 전략을 탐색하여 함수가 최고 효율성으로 실행되도록 합니다.

결론: C 언어 함수는 효율적인 프로그래밍을 위한 액세스 가능하고 강력한 도구입니다. 복잡성을 풀고 매개변수 전달, 반환 값, 모듈성, 재귀 및 함수 포인터와 같은 고급 개념을 이해하면 깨끗하고 재사용 가능하며 최적화된 코드를 작성할 수 있습니다. C 언어 기능의 단순성을 수용하고 프로그래밍 기술을 새로운 차원으로 끌어 올리십시오.

반응형
LIST

포인터와 배열의 관계: C언어 초보자를 위한 이해와 활용

프로그래밍/C언어
반응형
SMALL

포인터와 배열은 매우 긴밀한 관계를 맺고 있으며, 어떤 부분에서는 서로를 대체할 수도 있습니다. 배열의 이름은 그 값을 변경할 수 없는 상수라는 점을 제외하면 포인터와 같습니다. 따라서 배열의 이름은 포인터 상수 (constant pointer)입니다.

간단히 설명하자면 둘다 비슷한 속성을 가지고 있지만 배열은 메모리공간을 사용자 마음대로 접근하며 데이터를 넣고 수정할 수 있다. 포인터 같은 경우에는 특정 메모리에 주소값을 가지고 있어서 간접참조를 하는 방식이다.

포인터와 배열의 차이점


배열은 변수 선언과 함께 자신의 데이터를 저장할 공간을 배열의 크기만큼 연속적인 공간을 가집니다. 포인터는 자신이 데이터를 저장할 공간을 가지지 않고 저장할 공간이 있는 위치를 저장하는 메모리 번지를 저장합니다.

배열은 그 자체가 크기 때문에 함수의 인수로 전달할 수 없지만 포인터는 대상체가 무엇이든간에 4바이트의 크기밖에 차지하지 않으므로 함수로 전달할 수 있습니다. 그래서 배열을 함수로 전달할 때는 반드시 포인터를 사용해야 합니다.

포인터와 배열의 사용 이유


일반적으로 포인터를 사용하는 목적은 동적으로 메모리를 할당하여 사용하기 위해서 사용합니다. 그리고 메모리가 할당된 후에는 배열처럼 사용하면 된다고 이전에 설명하였습니다.

배열은 변수들을 메모리상에 일렬로 나열해놓은 것과 마찬가지입니다. 배열도 메모리상에 존재하므로 엄연히 주소값이 존재합니다. 배열 포인터란 이 주소값을 가리키는 포인터를 말합니다. 이것이 유용한 이유는 바로 2차원 이상의 배열을 가리킬 때 포인터를 통해 배열과 같은 인덱싱을 할 수 있기 때문입니다. 함수에 2차원 이상의 배열을 파라미터로 던질 때 유용하게 사용됩니다.

배열과 포인터의 관계


배열의 이름은 그 값을 변경할 수 없는 상수라는 점을 제외하면 포인터와 같습니다. 따라서 배열의 이름은 포인터 상수 (constant pointer)입니다.

배열 포인터는 배열의 주소값을 저장하고 인덱싱할 수 있는 포인터를 말합니다. 배열 이름은 1차원 배열에서는 포인터와 같지만, 2차원 이상의 배열에서는 포인터의 역할을 하지 않습니다.

예제


#include <stdio.h>

int main(void) {
    int arr[3] = {1, 2, 3};
    int *ptr = arr; // 배열의 이름은 포인터 상수이므로 포인터 변수에 할당 가능

    printf("arr[0]: %d\n", arr[0]);
    printf("ptr[0]: %d\n", ptr[0]);
    printf("*ptr: %d\n", *ptr);

    ptr[0] = 4; // 포인터 변수를 이용해 배열의 값을 변경 가능
    printf("arr[0]: %d\n", arr[0]);

    return 0;
}

위의 예제에서 `arr`은 배열이고 `ptr`은 포인터 변수입니다. `arr`는 배열의 이름이므로 포인터 상수이기 때문에 `ptr`에 할당할 수 있습니다. 그리고 `ptr`을 이용해 배열의 값을 변경할 수 있습니다.

반응형
LIST

[C언어] 프로그래밍의 꽃 포인터! 포인터란?

프로그래밍/C언어
반응형
SMALL

C언어에서 포인터는 메모리의 주소값을 저장하는 변수입니다. 포인터를 이해하기 전에 변수와 메모리, 메모리의 주소체계를 확인해보고 넘어간다. 변수를 선언한다는 것은, "메모리의 특정공간을 할당해서 그곳에 데이터를 저장하겠다"는 의미입니다.

포인터 변수가 주소를 저장하려면 변수의 주소를 알아야 하는데 변수 이름 앞에 & 연산자를 붙이면 해당 변수의 시작 주소를 반환합니다. 더 나아가서 포인터 변수가 저장하는 변수의 주소에 저장된 값을 참조하려면 * 연산자를 사용합니다.

포인터 변수도 변수이므로 사용하려면 먼저 선언을 해야합니다. 포인터 변수의 선언은 자료형 다음에 *연산자를 붙이고 포인터 변수의 이름을 쓰게 됩니다.

예시를 보며 자세히 알아볼까요.

다음은 포인터 변수의 선언과 사용에 대한 예제입니다.

#include <stdio.h>

int main() {
    int * p = NULL;
    int i = 10;

    p = &i;
    printf("변수 i의 주소값 : %p \n", &i);
    printf("포인터 p의 값 : %p \n", p);
    printf("포인터 p이 가리키는 값 : %d \n", *p);

    return 0;
}

위의 예제에서 `int * p = NULL;`은 포인터 변수 `p`를 선언하고 초기화하는 부분입니다.
`p = &i;`는 `i` 변수의 주소를 `p` 포인터 변수에 대입하는 부분입니다.
`printf("포인터 p이 가리키는 값 : %d \n", *p);`는 `p`가 가리키는 주소에 있는 변수의 값을 출력하는 부분입니다.

반응형
LIST

비주얼 스튜디오 2015 c언어 프로젝트 만들기부터 hello world까지

프로그래밍/C언어
반응형
SMALL

지난 시간에 비주얼 스튜디오 무료 버전을 설치했었죠


2016/06/24 - [프로그래밍] - 비주얼 스튜디오 2015 무료 버전 설치


이번에는 C언어 프로젝트 만들기로 해볼게요..


어떻게 보면 C, C++ 동일하게 생각해도 될 것 같네요^^


확장자만 다르면 끝이니까요.


그러면 이제 프로젝트 하나 생성해서 hello world를 한 번 찍어 볼까요??


비주얼 스튜디오 2015 실행하면 이렇게 뜹니다.



좀 더 기다리면 아래와 같은 화면이 뜨죠..


첫 실행할 때에는 주로 사용할 언어를 물어봐요^^



여기에서 새 프로젝트를 눌러줍니다.



저는 기본 언어를 C#으로 선택해서 C#이 젤 위에 있어요.


여튼 C언어를 만들기 위해서는 C++을 선택하고 WIN32콘솔 응용프로그램을 선택하시고


이름과 솔루션이름을 원하는 이름으로 바꿔주세요.






위치도 바꿔주셔도되요^^


그 후 확인을 눌러줍니다.



여기서 다음을 누르구요



빈프로젝트에 체크를 해주고 마침을 눌러주세요.



그러면 이렇게 화면이 뜹니다.


여기에서 소스파일에서 마우스 우클릭하구요.


캡쳐가 안되서 말로 설명할게요


추가에 마우스포인터를 갖다 댑니다.


그 후 새항목을 눌러주면 아래와 같은 화면이떠요.



여기서 확장자를 .C로 바꿔줍니다.


이러면 C언어구요.


CPP를 해주면 C++이 되요..ㅋㅋㅋㅋㅋ


그냥 차이가 없다고 보면되요..


이 카테고리가 C언어라서 저렇게 한거죠.


이제 hello world 찍는 코딩을 해볼까요.


엄청 간단하죠??ㅋㅋ


stdio.h 파일을 인쿠르드 하면 c언어구요.


iostream을 하면 c++이죠..


확장자에 따라서 컴파일러가 되고 안되고 있으려나..


궁금하신 분들은 한 번 실험해보시길..^^


사실 요즘 이런 확장자로 코딩을 잘 안하거든요..


저는 주로 c#, mfc, labview 이용해서 윈도우 프로그래밍만 하고 있다보니....ㅋㅋㅋㅋㅋ


stdio.h는 printf문을 사용하기 위한 해더파일입니다.


스트디오점에이치 이러지말고 좀 유식해 보이기 위해서


스탠다드아이오점에이치라고 써보는 것은 어떨까요??


스탠다드인아웃점에이치보다는 위에거가 좀 낫죠??ㅋㅋㅋㅋ


여튼 다하고 ctrl+f5를 눌러줍니다.


방금 실수로 f5를 눌러버리는 바람에 포스팅 날라갈뻔했네요...ㅋㅋ


그러면 아래와 같은 화면이....


그냥 f5를 누르면 순식간에 아래 콘솔창이 켜졌다 사라져요~~ㅋㅋㅋ



반응형
LIST

C언어의 꽃이라 해야하나요.. if 구문(조건문)

프로그래밍/C언어
반응형
SMALL

오늘은 if구문을 얘기해보려고 합니다.


모든 프로그램에는 이 조건문을 잘 써야죠..


어떻게 보면 인터럽트이기도 하니까요..


똑같은 일상에 만약 어떤 것이 있으면 이것을 행해라 이것이죠..


for 문에서 계속 수행하다가 일정 숫자가 되면 그만 돌아라는 것도 한 예이구요.


for(i = 0; i < 100; i++)

{

if(i == 50)

{

i = i+ 40;

}

}


이런식으르루요..


아니면 그냥 break 를 걸어서 for문을 빠져 나와도 되구요.


if문을 쓸 때, 간혹 실수하는 부분이 있어요.


위에서 보면 if(i == 50) 이라는 부분있죠..


간혹 코딩 빠르게 하다보면 if(i = 50)이렇게 써버릴 때가 있어요.


이러면 진짜 난감합니다.


오류도 안나서 디버깅이 힘들죠..


어떤 툴이었더라 잡아주는 것도 있었던 것으로 기억은합니다만..


안잡아 주는 경우도 많아요..ㅋㅋ


그니깐 잘 확인해서 꼭 실수 안하시길 바랄게요..^^

반응형
LIST

[C언어 기초] for 구문, while 구문(반복문)

프로그래밍/C언어
반응형
SMALL

오늘은 반복문에 대해서 알아보려고 합니다.


반복문에는 for 문과 while 문이 있죠..


사실 전 mcu를 사용하기 전까지는 for문만 사용했었는데요..


mcu를 배우고 거기에 코딩을 하면서 부터 while문도 사용하게 되었습니다.


사용법은 간단해요.


#include <stdio.h>


int main(void)

{

int i = 0;


for(i = 0; i < 10; i++)

{

printf("abc\n");

}

}


이렇게 하면 콘솔 실행창에는 다음과 같이 나오죠,


abc

abc

abc

abc

abc

abc

abc

abc

abc

abc


이렇게 10개가 찍힙니다.


그러면 하나하나 알아볼까요..


for문을 돌리기 위해서는 몇 번을 돌릴건가를 알아야죠.


그래서 정수형 변수 하나를 만들어줍니다.


그리고 for 문 안에서 시작 카운트를 몇부터 할 지 정해주죠.


정해주고 나면 ; 이놈을 이용해서 끝내주고 몇 번을 돌릴지 정합니다.


저는 0부터 시작을 하기에 10번돌리고 싶어서 숫자 10으로 해줬어요.


그리고 10보다 작을 동안은 하나씩 증하가라는 의미로 i++을 해줬습니다.


쉽죠..^^


while은 while() 여기에서 () 안에 내용이 참이면 계속 반복합니다.


쉽게 말하면 ()의 내용이 참인 동안 실행한다라고 생각하면되요.


while의 뜻과 같죠??^^


mcu공부를 하다보면 main문 안에 항상 while(1)이라는 것을 볼 수 있어요.


대부분의 코딩은 저 안에 들어가 있죠.


이것이 반복문의 내용 전부입니다..^^


간단하죠??^^


반응형
LIST