728x90



==
배열과 포인터 표기법

char data[5];
data[1] = 5;
*(data + 1) = 5 //data[1] =5; 와 같음

char data;
char *p = &data;
*p = 3;
p[0] = 3; // *p=3; 과 같다.

data[n] 과
*(data + n) 은 같다

‘&‘ 주소알아내는 연산자
’*‘ 주소가서 값 긁어와 또는 포인수변수선언시에

data[0] 에 0x12345668 에서 0x00 00 00 22로


배열의 요소를 구성하는 모든 바이트값이 다 수정됨.

//그래서 좀 더 정밀하게 컨트롤 하기위해 포인터 표기법을 사용하여
포인터 포인팅 하는 의미가 ‘주소를 가리키는 것과 함께 사이즈까지 단위까지 함의’

그래서 int * (영어로는 pointer to int인데, int형 포인터 또는 int 포인터형 중 전자가 좀 더 와닿음) 암 튼 int형 포인터를 -> char *(char형 포인터)로 형변환을 해줘서 주소값 움직이는 단위를 달리하였음.

어떻게 표기되어 있어도 이해할 수 있어야







==
메모리의 주소체계를 이해하지 못하면 포인터를 정확히 이해할 수 없습니다

진법변환은 기본이자 필수. 16진법과 매모리주소체계.

’포인터 변수‘란 메모리 주소를 저장하는 ’변수‘이며 데이터 ’타입‘과 식별자(=변수명) 사이에 그저 * 하나만 넣어주면 포인터 변수가 됩니다. (*, asterisk)

기본적인(primitive) 데이터 타입과 구조체, 배열, 공용체(변수의 성격을 가진 것들)에 대해서도 ‘포인터형’을 만들수가 있습니다. 그리고 ’&연산자‘를 변수명 앞에다 가져오면 그 변수의 주소값(주소)을 반환하게 됩니다.


포인터 변수를 이용하면 프로그램이 간결하고 효율적이며 그 포인터가 가리키는 '변수의 자료형'에 따라 타입을 맞추어 선언해야.

‘포인터변수의 주소값’을 저장하기 위해 포인터 형이 int **인 변수(포인터변수)에 저장하였습니다.

포인터 변수 dpNum1에서 *를 한번만 사용하면 dpNum1이 가리키는 포인터 pNum1의 주소값을 참고합니다.

**를 두번 사용하면 dpNum1이 가리키는 변수를 의미합니다. 이런 녀석을 ‘이중 포인터’라고 부르며, 포인터 변수를 가리키는 포인터라고 합니다.(포인터변수의 주소값을 가지는 가리키는 포인터변수)


포인터배열:
#include <stdio.h>
int main()
{
    int num1, num2, num3;
    int *pNumArray[3]={&num1, &num2, &num3};
    int i;
    
    for(i=0; i<3; i++)
     scanf("%d", pNumArray[i]);
    
     printf("입력된 숫자는 각각 %d, %d, %d 입니다.\n", *pNumArray[0], *pNumArray[1], *pNumArray[2]);
     return 0;
}




배열과 포인터:
포인터와 배열은 밀접한 관계가 있으며 이제부터 그 관계를 설명하고자 합니다. 배열의 이름은 사실 배열의 시작주소를 갖는 포인터 상수이며, 즉 첫번째 원소의 주소값을 나타냅니다.

==목차 : 요약
전체 15장
강의수 55개
저자 공동환

제1부
01장 변수와 메모리
02장 포인터
03장 배열
04장 포인터와 배열
05장 포인터와 문자열(포인터로 문자열 처리)
06장 구조체와 공용체
07장 포인터와 구조체
08장 포인터와 함수
09장 void형 포인터와 함수포인터
10장 동적메모리, 가변인자, const상수

제2부 실습
11장 변수와 연산자
12장 포인터와 배열
13장 포인터와 문자열
14장 포인터와 구조체
15장 스택, 큐, 단일 연결 리스트 SLL(Single Linked List)

+ Recent posts