C, C++
-
static과 전역변수, 지역변수C, C++ 2018. 12. 27. 16:35
지역변수는 {}를 벗어나서는 사라짐 static은 {} 밖에서 호출하여 사용할 수는 없지만 그대로 존재함! #include int reset();int next(int);int last(int);int now(int);int i = 1; int main(){ auto int i, j; // 지역변수 i가 전역변수 i보다 우선됨 i = reset(); for(j = 0; j < 3; j++){ printf("i = %d\t j= %d\n", i, j); printf("next(i) = %d\n", next(i)); // 여기서 전역변수가 1, 2, 3으로 증가됨 printf("last(i+j) = %d\n", last(i)); // static int 가 10,9, 8 printf("now(i+j) = %..
-
헤더와 메소드 분리하기, 메소드 포인터 이용하기C, C++ 2018. 12. 27. 09:17
메인함수 부분 : 파일명 pointerSample.c (실행부)#include #include "myfunc.h" // 내가 만든 헤더를 가져옴 같은 폴더에 위치하면 큰따옴표로 가져올 수 이있음 //main()----------------------------------int main(){ int iArray[] = {5,2,1,11,56,34,4,44,32,10}; double dArray[] = {10.4,22.1,1,55.2,40.5}; char word[][15] ={"apple", "banana", "strawberry", "pineapple", "pear"}; mysort(iArray,sizeof(iArray)/sizeof(iArray[0]),sizeof(iArray[0]),intCompare..
-
void 포인터C, C++ 2018. 12. 21. 09:21
char ch= 'A'; int a = 25; double b = 3.14; char str[] ="korea"; int ary[3][4]={1,2,3,4,5,6}; void* vp; vp = &ch; printf("%c\n", *(char*)vp); //vp의 사용시점에 가리키는 값이 무엇인지 표기해줘야함 vp = str; printf("%c\n", *((char*)vp+1)); printf("%s\n", (char*)vp); vp = ary[0]; printf("%d\n", *(int*)vp); vp = ary; printf("%d\n", **(int(*)[4])vp);// 2차원 배열이므로 **두개붙여야.. printf("%d\n", **((int(*)[3])vp+1)+1); vp = &b; pri..
-
함수의 포인터 표현 + 포인터와 배열의 차이점C, C++ 2018. 12. 20. 10:37
문자열은 기본적으로 주소이다! 배열 : 배열명은 주소상수 함수: 함수명은 주소상수 Char str[] = “christmas” ; 이경우 크리스마스는 stack에들어가고 Str[0]= ‘C’; 를 하면 변경이 가능하다. “christmas”[0] 표현도 가능, []배열 표시 앞에는 주소가 오면됨… 배열의 포인터표현을 하는 경우.. Char* ptr = “Christmas;”의 경우에는 배열과 다르게 수정은 되지 않음 RO(read Only) 영역에 올라가 있는 값을 포인터로 가르키기 때문에 수정불가 #include int plus(int a, int b){ return a+b;} int minus(int a, int b){ return a-b;} int main(){ printf("%d\n", plus(..
-
포인터 연산과 배열 표현(심화 연습편)C, C++ 2018. 12. 19. 16:14
int ary[3] ={10,20,30}; int* ptr[3]= {ary, ary+1, ary+2}; // 주소를 담고 있는 배열 (포인터배열) int **p[3]= {ptr, ptr+1, ptr+2}; // 포인터의 값을 담고 있는 배열 printf("%d, %d, %d\n",*ptr[0],*ptr[1],*ptr[2]); printf("%d, %d, %d\n",***p,***(p+1),***(p+2)); printf("%d, %d, %d\n",**p[0],**p[1],**p[2]); // 셋 다 동일한 결과값이 나옴 포인터연산과 배열 포인터연산에서의 +1은 대표값만큼 더해준다는 의미 배열명 +1 = 배열의 주소값이므로 (단순한 +1연산이 아니라 해당 주소값이 나타내는 덩어리 = 해당 배열의 하나의 요..
-
String 함수의 사용, 선택정렬- 버블정렬C, C++ 2018. 12. 18. 10:35
#include #include // string 함수 사용 가능하게 하기 위해서 // selection sortvoid sort(char (*word)[20], int len){ char temp[20]; for(int i = 0; i 0){ // 교환 strcpy(temp, word[i]); // temp에다 i넣기 strcpy(word[i],word[t]); // i에다 t 넣기 strcpy(word[t],temp); // t에다 i(temp) 넣기 //printf("%d:%s, %d:%s\n",i,word[i],t,word[t]); ..
-
2차원 배열C, C++ 2018. 12. 14. 09:48
2차원 배열의 선언과 사용 ***배열명 바로 뒤의 []만 숫자의 생략이 가능 int a[][3][4] 주소, 주소, 값ary +1 = 열의 크기가 한 덩어리라서(4열 = 4byte*4 --> 16byte 씩 더해짐)ary+i -> 각 행의 1열값의 주소만을 출력( 각 행의 대표값) *(ary+1)을 하면 *을 하나 달아줬으니까 배열의 한 칸(4byte)를 가리키는 값이 됨 --> +1 연산시 4씩 증가 ------------------------------------------------------------------------------------------------------------------------------------------------1행 6422256, 6422256, 164222..
-
포인터 얕은 복사 깊은 복사C, C++ 2018. 12. 13. 18:05
int* getResult(){ //함수에서 선언한 변수는 stack이라서 함수가 종료될 때 값이 존재하지 않음 static int arr[11] = {0,}; // static으로 선언해주면 메인함수에서도 변수가 존재함 //int *arr = (int*)malloc(sizeof(int)*10); //이거는 됨 int k = 0; for(k = 0; k < 11; k++) { arr[k] = 0; } printf("addr %u\n", arr); return arr;} int main(void) { int* ptr, i; printf("ptr %d\n", ptr); ptr= getResult(); printf("ptr : %u\n", *ptr); for(i = 0; i < 11; i++) { printf..