일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- angularJS
- angularjs ng-repeat orderby
- send data
- angularjs orderby
- angularjs 정렬
- ng-repeat 정렬
- in angularjs
- ngrepeat
- ng-repeat orderby
- send data between controller in angularjs
- Angularjs controller
- ng-repeat
Archives
- Today
- Total
개발자의 고군분투기
C언어 4일차_정리 본문
포인터 - 주소를 저장하는 변수 - 메모리에 직접 접근을 허용하는 저수준 프로그래밍 기능 - win32 콘솔 어플리케이션에서는 모든 포인터변수는 4byte(32bit) 크기 ex) char포인터, int포인터, double포인터 : 모두 4byte - 배열과 밀접한 관련이 있다 포인터 선언 - 변수형 * 변수명 ex) char * pc, int * pi, double * pd - * 는 변수형 또는 변수명 어느 쪽에 붙여도 상관없음 - *는 포인터 변수마다 입력하여야 함 *의 기능 - 연산자 : 곱셈 - 변수 선언시 : 포인터 변수임을 의미 - 변수 사용시 : 포인터 변수가 가리키고 있는 변수 자체 &의 기능 - 변수 앞에 사용시 변수의 주소를 의미 printf(), scanf()의 %s : 주소를 받음 ex) int num; scanf("%d", &num); printf("%d", num); char str[10]; scanf("%s", str); printf("%s", str); ============================================ 포인터와 배열의 연관관계 #include<stdio.h> int main(void) { int *pa; int arr[10]={1,2,3,4,5,6,7,8,9,10}; int i; for(i=0;i<10;i++) { printf("%d ",arr[i]); } printf("\n"); pa = &(arr[0]); // pa = arr; for(i=0;i<10;i++) { printf("%d ",*(pa+i)); } } ======================================== 배열과 포인터의 차이점 #include<stdio.h> int main(void) { int *pa; int arr[10]={1,2,3,4,5,6,7,8,9,10}; int arr2[10]={3,4,5,6,7,8,9,10,1,2}; int i; pa = arr; printf("세번째 배열 : %d %d %d %d\n", arr[2], *(arr+2), *(pa+2), pa[2]); pa = arr2; for(i=0;i<10;i++) printf("%d ", pa[i]); arr = arr2; } =========================================== const : 상수화 const [변수형] * [변수명] : 가리키고있는 변수의 값을 변경할 수 없는 포인터 변수 [변수형] * const [변수명] : 값을 변경할 수 있는 변수를 가리키지만, 다른 변수를 가리킬 수 없는 포인터 변수 const [변수형] * const [변수명] : 값을 변경할 수 없는 변수를 가리키고, 포인터를 변경할 수 없는 포인터 변수 ================================================ 구조체 - 서로 다른 데이터형을 묶어서 사용가능하다 - '멤버' 접근 방식을 사용하여 사용이 간편하다 구조체 멤버 - 각종 데이터타입의 변수 - 포인터 변수 - 구조체 자체를 가리키는 포인터 구조체 정의 방법 struct [구조체이름] { [변수형] [변수명]; ... }; ex) struct student { char name[10]; int kor; int eng; int mat; double avg; }; // 구조체 정의 구조체 사용 선언 struct [구조체명] [구조체변수명] ex) struct student s1; ============================================== 구조체 테스트 #include<stdio.h> int main(void) { struct student { char name[10]; int kor, eng, mat; double avg; }; struct student s1 = {"홍길동"}; s1.kor = 80; s1.eng = 50; s1.mat = 30; s1.avg = (s1.kor + s1.eng + s1.mat) / 3.0; // scanf("%s",s1.name); printf("%s\n",s1.name); printf("%d\n",s1.kor); printf("%d\n",s1.eng); printf("%d\n",s1.mat); printf("%f\n",s1.avg); } ========================================= 구조체의 활용 대입 - 동일한 타입의 구조체는 대입연산자를 사용하여 데이터 복사 가능 #include<stdio.h> int main(void) { struct point { int x; int y; }; struct point p1; struct point p2; p1.x = 100; p1.y = 50; p2 = p1; printf("%d , %d\n", p2.x, p2.y); } =============================================== 구조체의 배열 - 구조체를 배열 형태로 선언 - 반복문 등을 통한 편리한 접근 가능 struct point { int x, y; }; struct point p[3]; 구조체 배열과 일반 배열의 차이점 - 일반 배열의 이름은 배열의 시작주소 / 구조체의 이름은 구조체의 시작주소가 아님 구조체 포인터 - 포인터를 사용해서 구조체에 접근이 가능 struct point * pp = p[0]; ============================================ 구조체 배열 사용예 #include<stdio.h> #include<string.h> int main(void) { int i; struct student{ char name[10]; int kor,eng, mat; double avg; }; struct student s[3]={{"홍길동",100,100,100,100},{"정우성",50,50,50,50},{"강동원",70,70,70,70}}; for(i=0;i<3;i++) { printf("%s, %d, %d, %d, %f\n", s[i].name, s[i].kor, s[i].eng, s[i].mat, s[i].avg); } } ============================================== 구조체 포인터 사용 예 #include<stdio.h> #include<string.h> int main(void) { int i; struct student{ char name[10]; int kor,eng, mat; double avg; }; struct student s1 = {"홍길동",100,100,100,100}; struct student * ps1; ps1 = &s1; printf("s1을 사용하여 이름 출력 : %s\n", s1.name); printf("ps1을 사용하여 이름 출력 : %s\n", (*ps1).name); printf("ps1을 사용하여 이름 출력 : %s\n", ps1->name); } =============================================== 공용체 사용 예 ex) 회원정보 저장 데이터 변수 생성 struct sosok { char school[30]; char job[30]; }; union sosok { char school[30]; char job[30]; }; =========================================== 열거체 - 정수형의 일종 ex) 요일 검사 int weekday; // 0이면 일요일, 1이면 월요일.... enum week {sun, mon, tue, wed, thu, fri, sat}; enum week weekday; ==================================== 열거체 사용예 #include<stdio.h> #include<string.h> int main(void) { enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; enum week weekday; weekday = Wed; printf("%d\n", weekday); switch(weekday){ case 0 : case Mon : case Tue : }; } ============================================= typedef - 새로운 자료형 명명 (별명) - 주로 구조체 정의시 사용 - 가독성 증가 및 편의성을 위해 사용 #include<stdio.h> #include<string.h> int main(void) { typedef unsigned char UCHAR; struct student { char name[10]; int no; }; typedef struct student STUDENT; struct student s1; STUDENT s2; UCHAR ch; } ========================================== 함수 호출방식 - Call by Value (Passing by Value) : 값을 전달 - Call by Reference (Passing by Pointer) : 포인터를 전달 함수 호출시 필요한 것 - [리턴 타입] 함수명([전달인자]...) ex) 함수를 사용한 swap #include<stdio.h> void swap(int *, int *); int main(void) { int a=10,b=20; swap(&a,&b); printf("a: %d, b: %d\n", a,b); } void swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } // Call By Reference 를 사용하여 main() 함수 내의 변수를 직접 접근 // 기본 변수형인 int 이므로 사용이 간편 ============================================== 배열(문자열)의 함수 인자 전달 - 배열의 전달은 언제나 포인터로 전달 - 배열의 이름은 배열의 시작주소 - 문자열의 이름은 문자열의 시작주소 문자열의 Call by Reference 함수 호출 예 #include<stdio.h> void print_str(char *); int main(void) { char str[20] = "Merong"; print_str(str); } void print_str(char *recv_str) { recv_str[0]='Q'; printf("%s", recv_str); } ========================================== 구조체의 함수 호출 #include<stdio.h> typedef struct { char name[10]; int kor,eng,mat; double avg; } STUDENT; void input_std(STUDENT *); int main(void) { STUDENT s1; input_std(&s1); printf("%s, %d, %d, %d, %f\n", s1.name, s1.kor, s1.eng, s1.mat, s1.avg); } void input_std(STUDENT *pstd) { printf("이름을 입력하시오 : "); scanf("%s", pstd->name); printf("국어 영어 수학 성적을 입력하시오 : "); scanf("%d %d %d", &(pstd->kor), &(pstd->eng), &(pstd->mat)); pstd->avg = (pstd->kor + pstd->eng + pstd->mat) / 3.0; }
'C언어' 카테고리의 다른 글
C언어 4일차_실습 (0) | 2016.11.04 |
---|---|
C언어 3일차_실습 (0) | 2016.11.03 |
C언어 3일차_정리 (0) | 2016.11.03 |
C언어 2일차_실습 (0) | 2016.11.03 |
C언어 2일차_정리 (0) | 2016.11.03 |
Comments