120 likes | 274 Views
Computer Programming in C Chapter 5. 2004 년 가을학기 부산대학교 전자전기정보컴퓨터공학부. 5 장 . Pointer 와 Array. 목차 Pointer 와 주소 Pointer 와 Function Parameter Pointer 와 Array Array Arithmetic Character Pointer Pointer Array 와 Multidimensional Array Double Pointer Pointer to Function.
E N D
Computer Programming in C Chapter 5 2004년 가을학기 부산대학교 전자전기정보컴퓨터공학부
5장. Pointer와 Array • 목차 • Pointer와 주소 • Pointer와 Function Parameter • Pointer와 Array • Array Arithmetic • Character Pointer • Pointer Array와 Multidimensional Array • Double Pointer • Pointer to Function Computer Programming Chapter 5
1. Pointer 와 Address • Address 또는 Pointer • Main Memory의 위치를 지정 • 각 Variable의 값을 저장하는 위치 • &n : m이 저장된 위치 (0x20AC) • Pointer Variable • Address를 값으로 하는 변수 Main memory int n,m;n=20;m=30; 0x20AC n = 20 pn = 20AC int n,*pn;pn=&n;*pn=30; Computer Programming Chapter 5
2. Pointer와 Function Parameter • Function의 Parameter • Call-By Value를 통한 Function내의 값 변경 int m,n; . . . m=20; m=50;swap(&m,&n); . . . void swap(int *a, int *b) { int m; m=*a; *a=*b; *b=m; } int m,n; . . . m=20; m=50;swap(m,n); . . . void swap(int a, int b) { int m; m=a; a=b; b=m; } 와 비교 Computer Programming Chapter 5
3. Pointer와 Array Main memory • Pointer 와 Array의 유사성과 차이점 • int values[100]; • values: values array의 처음 주소 • int *pvalues;pvalues=values; pvalues[0]와 values[0]은 서로 호환 가능 • 차이점: values는 상수 0x20AC=values=&values[0] values[0] … values[99] Computer Programming Chapter 5
Pointer와 Array • Pointer와 Array Index int *pvalues;pvalues=values; /* pvalues[0]==values[0] */++pvalues; /* *pvalues==values[1] */ • Exampleint sum=0; int sum=0; int i, values[10]; int i,values[10],*pvalues;/* ... value[0], ... value[9] */ pvalues=values;for(i=0;i<10;i++) for(i=0;i<10;i++) sum=sum+values[i]; sum=sum+*values++; */ int sum=0; int sum=0; int i, values[10]; int i,values[10],*pvalues;pvalues=values;for(i=0;i<10;i++) sum=sum+pvalues[i]; Computer Programming Chapter 5
4. Array Arithmetic • Increment and Decrement • pvalues가 0x1000일 때 pvalues++ 한 후pvalues != 0x1000pvalues == 0x1000 + sizeof(type of pvalues, int의 경우 4) • Multiplication과 Division은 Pointer에 대하여 사용 불가능 int *pvalue; int value; pvalue=&value; pvalue=pvalue*2; /* Error */ pvalue=pvalue+2; /* OK */ Computer Programming Chapter 5
5. Character Pointer • Character Pointer • Exchangeable with Character Array • Example char *string1=“Hello World\n”;char string2[]=“Hello World\n”; Computer Programming Chapter 5
5. Character Pointer • Pointer to String and Double Pointer • Examplechar *stringArray[2]; char **pstr; stringArray[0]="Hello first\n"; stringArray[1]="Hello second\n"; pstr=stringArray; printf("%s",*pstr++); printf("%s",*pstr); • Parameters of main function void main(int argc, char *argv[]) pstr “Hello first” stringArray[0] “Hello second” stringArray[1] Computer Programming Chapter 5
6. Pointer Array and Multidimensional Array • Pointer Array: Array of Pointer • Exampleint values[10][20];int *pvalues[10];pvalues[0]=values[0]; pvalues[0]++; /* ? */ pvalues[0][1]; /* ? */ Main memory values=0x1000 values[0]= 0x1000 values[0][0] values[0][0] values[0][1] … values[1]=0x1050 values[1][0] … … values[9][19] Computer Programming Chapter 5
7. Double Pointer • Example #include <stdlib.h> void main() { char *string = "Hello, world!"; char *copystr; if(allocstr(strlen(string), ©str))strcpy(copystr, string); else fprintf(stderr, "out of memory\n"); ...}int allocstr(int len, char **retptr) { char *p = malloc(len + 1); /* +1 for \0 */ if(p == NULL) return 0; *retptr = p; return 1; } • If single pointer would be used? Computer Programming Chapter 5
8. Pointer to Function • Function Name • An Address: “Pointer to Function” makes sense • Example Computer Programming Chapter 5