본문 바로가기

2014 C/3월

2014.03.31 #include int main() { int iNum[10]; printf("%d\n",&iNum); printf("%d\n",&iNum+1); // 앞에 &를 붙이면 배열전체라는 뜻이다. // 배열전체에서 +1 했으니 배열의 주소값 다음으로 넘어감. // 배열의 크기가 10이기 때문에 주소값 40byte증가 return 0; } 2차원 배열에서는 #include int main() { int iaArr[3][2]={ //이 부분의 괄호는 꼭 둘 중 하나는 채워야한다. {1,2}, {2,3}, {4,5} }; return 0; } 더블 포인터 int iNum = 3; int * ip = &iNum;int ** ipp = &ip; iNum -> 3 //만약 iNum에 * 를 붙이면 곱셈으로 인식한다.&i.. 더보기
2014.03.28 const int A = 100;const int B = 200; //const는 B를 꾸며준다. B변경 불가능int * C = &A;const int * D = &A; //const는 *을 꾸며준다 포인터 E가 가르키는 A변경 불가능int * const E = &A; //const는 E를 꾸며준다. E가 가르키는 포인터 변경 불가능const int *const F = &A; //const는 *과 F를 꾸며준다. 모두 변경 불가능 A=10;B=20; //Error*C=30;*D=40; //ErrorD=&B;*E=50E=&B; //Error*F=60; //ErrorF=&B; //Error **const는 바로 뒤에있는 것의 변경을 불가능하게 하며 두번 중첩으로 쓸 수 있다. ->음.. 배열에 있는 값을 수.. 더보기
2014.03.27 포인터 *주소 값의 저장을 목적으로 선언되는 포인터 변수* int * iNum;(자료형 * 변수이름)의 방법으로 선언한다. 앞에 int형이 붙었음은 이 포인터가 가르키는 변수가 int형 인 것을 알 수 있다. "int형 포인터 변수 pnum이 int형 변수 num을 가르킨다." #include int main(){ int num=7; int * pnum; pnum = & num; return 0;} * 의 명칭 = asterisk (에스터리스크) 에러가 뜨지않고 워링이 뜬다.- 포인터가 비슷하기 때문에 에러가 아닌 워링이뜸 - 포인터 변수에int * poin = 125;라고 초기화 할때에는 결국 쓰레기값으로 포인터 변수를 초기화 한 것과 다름없다. **포인터를 제대로 쓸 자신이 없으면 포인터 변수를 처음.. 더보기
2013.03.26 #include void myCnt(char* cpstr); char caStr[256] = ""; char catemp[256] = ""; //myCnt함수에서도 쓰일 수 있는 전역변수로 선언 int main() { char* cpapple = "apple"; char* cppineapple = "pineapple"; char* cpbanana = "banana"; char* cptomato = "tomato"; //****** myCnt함수 호출 ******/ myCnt(cpapple); myCnt(cppineapple); myCnt(cpbanana); myCnt(cptomato); //******myCnt함수 호출 끝******/ printf("%s \n", caStr); return 0; } vo.. 더보기
2014.03.26 6. *cpstr은 각각 "12345"의 주소값을 가지고있다. 임의의 주소로 100,101,102,103,104,105번지까지의 주소를 저장한다. ↓16. 양수형 정수를 선언하고 0으로초기화↓18. while조건문 실행 (조건먼저확인하고 실행)* do while문은 실행부터하고 조건확인 *-> 0 != *cpstr의 조건을 따라 cpstr이 가리키는 번짓수로 이동한다. 처음 실행시 임의의 주소 100번지로 향함.100번지에는 '1' 이라는 값이 들었고 컴퓨터는 이것을 1이 아닌 아스키코드 값으로 인식한다.cpstr의 100번지 메모리가 아스키코드값 Null이 아니면 실행 ↓ 21. ++cpstr로 주소값을 증가시킨다. 101의 주소를 가르키게됨.↓22. ++uiCnt로 while문이 작동된 횟수를 세는 .. 더보기
2014.03.25 char* const cp = str;->const는 값을 바꿀 수 없다 는 뜻->즉 cp는 값을 바꿀 수 없다. #include int main() { char str[]="Good morning!"; char* cp1; char* cp2; cp1=str; printf("%c\n",*cp1); printf("%s\n",cp1); printf("%s\n",str); //++cp1; cp1 = cp1+5; printf("%s\n",cp1); printf("%s\n",str+5); cp2 = str; printf("%c\n",str[0]); printf("%c\n",cp2[0]); return 0; }GGood morning!Good morning!morning!morning!GG *(str+1)*(cp2+.. 더보기
2014.03.25 배열 #include int main() { int arr1[5]={1,2,3,4,5}; int arr2[ ]={1,2,3,4,5,6,7}; //배열의 크기를 지정하지 않고 초기화를 하면 초기화된 크기로 지정된다. int arr3[5]={1,2}; int ar1Len; int ar2Len; int ar3Len; int iCnt; printf("배열 arr1의 크기 : %d \n", sizeof(arr1)); //4byte씩이기 때문에 배열의 크기 5*4를 하면 20이 나온다. printf("배열 arr2의 크기 : %d \n", sizeof(arr2)); printf("배열 arr3의 크기 : %d \n", sizeof(arr3)); ar1Len = sizeof(arr1) / sizeof(int); ar.. 더보기
2014.03.24 재귀함수(자신이 자신을 호출한다.)Recursive문-> 메모리용량을 크게 차지한다.-> 잘못 쓸 경우 치명적인 손상을 입힐 수 있다.-> 안쓰는게 좋다. (쓰지말자)-> 코드의 5,6번째줄이 없을 시 (명령 종료가 없어짐) 무한루프에 빠져 치명적인 손상을 입히게 된다.-> CPU용량이아닌 메모리 용량을 차지하기 때문에 운영체제가 위험해질시 운영체제에서 강제종료를 시킨다. 무한루프에 빠지게 만드는 임의 코딩.-> CPU용량을 차지하는 것이기에 운영체제에서 별다른 제지는 하지 않는다. 더보기
2014.03.24 Code 함수 Data 전역변수 Bss heap 동적할당 stack 지역변수 ->배경색 있는 메모리는 Save파일이 따로 있다. 하드드라이브(HDD)에 메모리를 옮겨놓은 후 다시 실행파일에 복사해준다. 될 수 있으면 코드를 짧게 짜야한다.(최적화) 용량을 줄이기 위해...(함수와 전역변수는 될 수 있으면 최적화 시켜야한다.)지역변수도 계속해서 쓰일 경우 메모리를 삭제했다,생성했다를 반복하는 것 보다는 전역변수로 선언하는 것이 더 좋다. Code에는 함수메모리도 있지만 상수메모리도 저장된다.Code에 어떤 행위에 대한 명령이 있고 밑에는 그 결과를 나오게하는 변수가 있다.BSS영역은 BSS영역에 무슨 메모리가 오든 0으로 채운다. BSS는 0으로 채워져있다. 지역변수 : Run Time (실행 중에 생성된.. 더보기
2014.03.21 12번째줄에 iNum = Add(10,20);으로 Add함수를 호출했다.함수를 호출할 경우 지금 작동되던 main함수를 멈추고 Add함수의 위치로 점프한다.호출되어 작동한 첫번째줄의 선언 int Add(int num1,int num2) 에는 num1과 num2에 각각 10과 20를 초기화시킨다.12번째줄의 Add(10,20)은 Add함수의 첫번째 인자와 두번째인자에 10과 20을 넣으라는 뜻. main함수에서 Add를 호출하지 않으면 주석과 다름없이 아무것도 작동이 되지않는다. main함수는 Add함수를 호출했기때문에 Add함수의 모든 명령이 종료되기 전까지는 모든 수행을 멈춘다. 함수의 호출int Add(int num1,int num2); 이런 함수호출만을 여러줄 모아놓은것을 header파일 이라고 부.. 더보기