학교/자료구조

2-1. 배열과 구조

daykim 2021. 9. 27. 15:50

포인터 해석

int *list1;
int list2[5];

 

list2  &list2[0]
list2 + i &list2[i]
(list2 + i)  &list2[i]
*(list2 + i) list2[i]
if(i == 2) list2[i] a+2*sizeof(int)
list2[2] → a+2*4  // a : 임의의 주소 값

 

역참조

  • list[i]
    • "=" 기호 우측 : (list + i)가 가리키는 값
    • "=" 기호 좌측 : 값을 (list+i)에 저장

 

일차원 배열의 주소 계산

  • prt+i → 주소
  • *(prt + i) → 가리키는 값
void print1(int *prt, int rows){
    int i;
    for(i=0; i<rows; i++){
    	printf("%u %d", prt+i, *(prt+i));
    }
}

 

1차원 배열

int *pt;
int list[5] = {10, 20, 30, 40, 50};
pt = &(list[0]);
index value      
pt 2004 list[4] 50
0 10 *(list+4) 50
1 20 *pt 10
2 30 *(pt+4) 50
3 40 pt[4] error(x) → 50
4 50 * pt = list로 동등하게 생각!

 

struct

다양한 타입의 변수의 집합

  1. int, float ...
  2. *pt
  3. array, struct
  4. user define
typedef struct humanBeing{
    char name[10];
    int age;
    float salary;
}humanBeing; //구조체 별칭

humanBeing p1, p2;
pq.age = 20;
p1.salary = 30;
strcpy(p1.name, "Jang");
// + p2 = p1 → 컴파일 따라 가능할수도 불가능할수도

// 별칭을 지정하지 않는 경우
struct humanBeing{
    char name[10];
    int age;
    float salary;
};
struct humanBeing p1;

// typedef를 사용하여 별칭을 지정하면 위의 방법과 같이 사용하지 않아도 된다.

 

2차원 배열

int list[2][3] = {{3, 6, 9}, {12, 15, 20}};
int *p[2], **X;

p[0] = &list[0][0];
p[1] = &list[1][0];
X = p = &p[0];
list[0][2] 9
*(p[0]+1) 6
*X + 2 2008 (2000 + 2*4)
*(*X + 2) 9
**X 3
X[0][2] 9

 

'학교 > 자료구조' 카테고리의 다른 글

5. 이중 연결리스트  (0) 2022.03.14
4. 연결 리스트  (0) 2022.03.14
3. 스택과 큐  (0) 2021.09.28
2-2. 다항식  (0) 2021.09.27
1. 기본개념  (0) 2021.09.27