25.06.19 학습개발일지 / C언어 문법

2025. 7. 24. 20:21·LMS 7/개발일지

 

1. C언어 문법(혼공C) / 배열과 포인터

1) 배열과 주소 연산자(&)

포인터를 사용할 때에는 주소 연산자가 필수적으로 사용됨

하지만 배열을 사용할 때에는 주의할 점이 있다 !

int *p = arr
int *p = &arr
 

전자는 arr[0] 의 주소를 포인터 p로 가르키라는 의미이고

후자는 arr 전체의 주소를 포인터 p로 가르키라는 의미임

배열의 연산에 필요한 것은 전자이다

 

2) 배열의 연산

주소는 자료형에 대한 정보를 가진 특별한 값이라서 정해진 연산을 특별하게 수행하게 됨

따라서 주소에 정수를 더 하게 되면 아래와 같은 방식으로 작동함

 

주소 + 정수 ==> 주소 + (정수 * 변수의 크기)

//1. 의도
int ary[3];      // 배열 선언
ary[0] = 1;      // 첫 번째 요소에 1 대입
ary[1] = 0;      // 두 번째 요소에 0 대입
ary[2] = 4;      // 세 번째 요소에 4 대입

//2. :x: 잘못된 표현
int ary[3];       // 1. 배열 선언 (ary[0], ary[1], ary[2])
ary = 1;          // :x: 오류!
ary + 1 = 0;      // :x: 오류!
ary + 2 = 4;      // :x: 오류!
//>> ary 자체는 주소(상수)이기 때문에 변수처럼 사용할 수 없고 값을 변경할 수 없음

//3. :white_check_mark: 올바른 표현
int ary[3];       // 1. 배열 선언 (ary[0], ary[1], ary[2])
*ary  = 1;          // :white_check_mark: (=> ary[0] = 1)
*(ary + 1) = 0; // :white_check_mark: (=> ary[1] = 0)
*(ary + 2) = 4; //:white_check_mark:(=> ary[2] = 4)
//>> 주소에 *을 붙여 역참조해서 변수로 사용하고 값을 변경한다
 

scanf("%d", &ary[0]); 에서 배열인데도 불구하고 &을 쓰는 이유

>> scanf 에서는 "주소" 가 필요함

ary : 주소

ary[0] : ary 배열의 첫 요소 값(주소가 아님)

따라서 배열 안 첫 요소를 바꾸려면 &을 써야하는 것!

ex)

scanf("%d",ary)와 scanf("%d",&ary[0])은 완전히 같은 동작을 함

scanf("%d",ary+2)와 scanf("%d",&ary[2])는 완전히 같은 동작을 함

 

3) 포인터에 배열명을 저장해서 사용하기

int ary[3] // 배열 선언
int *pa = ary; // 포인터에 배열 주소를 저장, 포인터가 배열을 가르키는 상태가 됨.
 

이제 포인터로 배열을 사용할 수 있는 상태가 되었다.

*(pa + 1) = 10; // ary[1]에 10 저장
pa[2] = 50 // ary[2]에 20 저장
 

위를 보면

두 가지로 포인터를 사용할 수 있는데,

1. *(ary+1) = 10 처럼 배열 연산을 했던 것처럼 사용할 수 있음

2. ary[2] = 50 처럼 배열 요소를 바꾸는 것처럼 사용할 수 있음

 

4) 포인터 뺄셈

int ary[5] = {10,20,30,40,50}
int *pa = ary;
int *pb = pa + 3;
 

위를 기준하여

pb - pa는 포인터의 뺄셈으로 ary[3]과 ary[0]과의 간격 차이임

결과는 (40 - 28) / sizeof(int) = 12 / 4 = 3 이 되게 된다.

 

 

 

*pb - *pa는 배열 요소끼리의 뺄셈으로 값의 차이임

결과는 40 - 10 = 30 이 되게 된다.

 

'LMS 7 > 개발일지' 카테고리의 다른 글

25.06.23 개발일지  (3) 2025.07.24
25.06.22 학습일지  (1) 2025.07.24
25.06.16 학습개발일지 / C언어 문법, 06. 간단한 프로그램 만들기 1  (0) 2025.07.24
25.06.15 학습개발일지 / C언어  (0) 2025.07.22
25.06.13 학습개발일지 / C언어  (0) 2025.07.22
'LMS 7/개발일지' 카테고리의 다른 글
  • 25.06.23 개발일지
  • 25.06.22 학습일지
  • 25.06.16 학습개발일지 / C언어 문법, 06. 간단한 프로그램 만들기 1
  • 25.06.15 학습개발일지 / C언어
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
25.06.19 학습개발일지 / C언어 문법
상단으로

티스토리툴바