Main 썸네일형 리스트형 [c]2차배열을 함수에서 리턴받기 1.소스코드 --------------------------------------------------- #include int(* initArray())[4] { static int arr[4][4] = { 0 }; for (int i = 0; i < 16; i++) *(arr[0] + i) = i + 1; return arr; } int main() { //int** arr = initArray(); int(* arr)[4] = initArray(); for (int i = 0; i < 4; i++) for (int j = 0; j < 4; j++) printf("%d", arr[i][j]); return 0; } ------------------------------------------------.. 더보기 [c]for문 한개로 이차배열 초기화하기 1. 소스코드------------------------------------#include int main() { int arr[4][4] = { 0 };for (int i = 0; i < 16; i++)*(arr[0] + i) = i + 1; for (int i = 0; i < 4; i++)for (int j = 0; j < 4; j++)printf("%d", arr[i][j]); return 0;} --------------------------------------- 2.output----------------------------------- -------------------------------- 3. 결론 딱히없다. 그냥 1에서 16까지 차례대로 초기화시킬일이있었는데 되나 싶어서 심심해서 .. 더보기 [c] 메모리 침범하기 1. 개요 원래 목적은 아무메모리나 참조해서 그 메모리의 주소값을 각 자리마다 계속 더하여 한자리수로만들후 이 값의 분포가 얼마나 랜덤한지에 대해 알아보려는 것이었다.하지만 쓰레기값을 참조하려다가 그냥 선언되있지 않은 메모리영역을 주소값 1씩 늘려 막 참조하는방식으로 해보았는데 결과가 흥미로웠다.당연히 참조할수없는곳을 건드려서 금방 다운되는경우가 대부분이었지만 가끔씩 아무리 참조해도 에러나지않는경우도 있었다.그냥 안쓰는 영역이 많았나보다 했지만 만단위 넘게 참조해도 멀쩡했다. 2.소스코드---------------------------------------------------------------------------------------------------------------------------.. 더보기 [c]sizeof(void)는 불가능 #include int main() {printf("%d", sizeof(void));return 0;} ----------------------------------------sizeof(void)는 불가능하다. 불완전한 형식은 사용할수없다고 컴파일 에러 발생한다. 더보기 [c] 한글 문자열 #include int main() { char arr[] = "한글 테스트"; int i = 0; for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) printf("arr[%d] : %c \n",i, arr[i]); printf("%c%c", arr[0],arr[1]); return 0; } -------------------------------------------------------------------- -------------------------------------------------------- 1. 한글문자열은 한글자당 배열 두칸을 잡아먹는다. 2. 각 칸마다 출력하면 알수없는글자가나온다 3. 두 칸을 이어서 출력하면 온전한 글자가 출력된다. .. 더보기 [c] 정수와 정수를 나눌때의 처리과정 int a =100 , b=100;a/8 * b/8; 이 연산의 결과는 144가 아닌 150이 나온다.정수끼리나눌때 형의 승격이 발생하는모양이다.하지만 (a/8) * (b/8)의 결과는 144 이다. 정수와 정수의 연산은 정수형으로 그대로 처리되는줄알았는데 뭔가 이해가 안된다. *바보였다.... 100/ 8 = 12.5 -> 12 12 *100 = 1200 1200 /8 = 150 그냥 순서대로 가고있는거였는데 착각했다.후의 100/8에서 0.5가 버려지지 않느냐 버려지느냐의 순서차이었다. 더보기 [c] 삼항연산자는 반드시 값을 반환해야한다 #include void test(){}int main(){ int a;scanf("%d",&a); printf("%d", a>0? test() : a);} ---------------------------------------------------#include int test(){ return 0;}int main(){ int a;scanf("%d",&a); printf("%d", a>0? test() : a);}-------------------------------------------------------- 1번 예제에서는 에러가발생하지만 2번에서는 정상 작동한다.에러 내용 : (error: invalid use of void expression) 삼항연산자는 반드시 값을 반환해야하므로 그 안에.. 더보기 [c] 연산자도 값을 반환한다. #includeint main(){ int a;scanf("%d",&a);printf("%d", a>0? a*=-1 : a);}--------------input : 21output : -21---------------위의 결과에서 다음과같은 사실을 알 수 있다. 1. a=1이나 a*=1과같은 대입연산자도 그 결과를 반환한다.2. 삼항연산자 안에는 함수나 연산자가 심지어는 다른 삼항연산자 조차도 들어갈수있다.3. 삼항연산자는 값을 반환한다. * 이해할순없지만 3번째 항에서는 a*=-1 같은식으로하면 에러난다. 괄호를 쳐주어서 다음과 같이 해주어야한다. a>0? a*=-1 : (a*=-1);아마도 연산자의 우선순위 때문인듯하지만 위와같은 방식은 왠만하면 안쓰는것이 좋을듯 하다. 더보기 [c] 올림 버림 반올림 일의 자리에서 반올림 , 올림 , 버림1. 일의자리에서 버림버림: 123 일때 120 , 128 에서도 120 , ....123 을 10 으로 나눈 몫은 12 이고 나머지는 3123 / 10 --> 12123 % 10 --> 3123 - 123%10 을 하면 120 이 나옵니다.다른 방법으로123 을 10 으로 나눈 몫이 12 .. 123 / 10여기에 10 을 곱하면 120 .. 123 / 10 * 10참고로 이 성질을 이용하면 123 % 10 은 123 - 123/10*10 과 같은 표현입니다.2. 일의 자리에서 반올림반올림:123 에서 120 , 125 에서는 130 , 128 에서 130수의 일의 자리에 5 를 더하면 5 이상의 수는 십의 자리로 올라가고 5 보다 작은 수는 올라가지 않습니다.(1.. 더보기 [c]세자리수 한번에 입력받아 한글자씩 나눠넣기 #includeint main() { int a,b,c,d,e,f; scanf("%d",&a); scanf("%1d%1d%1d",&d,&e,&f); // 더보기 이전 1 2 3 다음