#include int a[2][3][4] = { {{1,2,3,4},{5,6,7,8},{9,10,11,12}}, {{10,20,30,40},{50,60,70,80},{90,100,110,120}} }; // 100을 출력하려면? void f1(int *p) { printf("%d\n", p[17]); } void f2(int (*p)[4]) { printf("%d\n", p[-1][1]); } void f3(int (*p)[3][4]) { printf("%d\n", p[1][2][1]); } void f4(int (*p)[3][4]) { printf("%d\n", p[-2][2][1]); } void f5(int (*p)[2][3][4]) { printf("%d\n", p[0][1][2][1]); } ..
#include int main() { int *p = malloc(sizeof(int)); printf("%#.8x\n", p);// p가 가리키는 주소 printf("%#.8x\n", p + 1);// 4byte 증가 printf("%#.8x\n\n", &p + 1);// p가 저장된 주소 + 4byte int a[4]; printf("%d\n", sizeof(a));// 16 printf("%#.8x\n", a); printf("%#.8x\n", a + 1);// 4byte 증가 printf("%#.8x\n", &a);// a와 동일 printf("%#.8x\n\n", &a + 1);// 16byte 증가 char **p2 = (char**) malloc(100 * sizeof(char*)); pr..
#include int a[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; int main() { int *p = a; char *q = (char *)a; int(*r)[4] = (int(*)[4])a; int(*s)[3] = (int(*)[3]) a; int(*t)[2][3] = (int(*)[2][3])a; printf("%d %d\n", p[0], p[1]);// 1 2 printf("%d %d\n", q[0], q[1]);// 1 0 -> little endian 구조 생각하며... 10 00 00 00 저장 printf("%#.8x , %#.8x\n", r[0], r[1]);// 1000 1010 printf("%#.8x , %#.8x\n", s[0], s[1]);// 10..
#include int main() { int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} }; // 주소에서 덧셈 연산은 내용을 고려해서 계산된다. printf("%x\n", a);// 1000 printf("%x\n", a[0]);// 1000, a[0] type : int [4] , 내용 type : int printf("%x\n", a[0] + 1);// 1004, 4 증가 , a[0] type : int [4] , 내용 : int , 연산 4 증가 printf("%d\n", *a[0]);// 1 printf("%d\n", *(a[0] + 1));// 2 , a[0][1] 동일 printf("%x\n", *a);// 1000 , *a type : int [4] ..
#include // 배열 parameter int sum(int b[4]) {// int b[4] -> int * b로 바꿔도 상관없다. int i, sum = 0; for (int i = 0; i < (sizeof(b) / sizeof(b[0])); i++) { sum += b[i]; } return sum; } void main(void) { int a[4] = {1, 2, 3, 4 }; printf("%d\n", sum(a)); system("pause"); } /* 결과는 10이 나올 것 같다. 하지만 결과는 1이 나온다. 그 이유는 sum(a)에서 a은 포인터로 넘겨졌기 때문이다. 따라서 int b[4] == int * b이며 b의 type은 int *이다. int *은 4byte이기 때문에 ..
#include // 1차원 배열 void main(void) { int a[4] = { 10, 20, 30, 40 }; // 주소는 1000으로 가정 printf("%d\n", a[0]);// 10 printf("%#.8x\n", &a[0]);// 0x1000 printf("%#.8x\n", a);// 0x1000 printf("%d\n", a[0] + 1);// 11 printf("%#.8x\n", a + 1);// 0x1004 printf("%d\n", *a);// 10 printf("%d\n", *(a + 1));// 20 printf("%#.8x\n", &a);// 0x1000 printf("%#.8x\n", *&a);// 0x1000 printf("%#.8x\n", &a + 1);// 0x10..
#include /* Little, Big endian 데이터가 실제 메모리에는 어떻게 저장될까? */ void main(void) { int a = 0x01234567; /* a는 스택영역에 저장될 것이다. int형은 4byte이기 때문에 (주소는 편의상 0x1000 이라고 가정한다.) 주소 - 데이터 1000 - 0x?? (1byte) 1001 - 0x?? (1byte) 1002 - 0x?? (1byte) 1003 - 0x?? (1byte) 위와 같이 저장될 것이다. 참고로 1byte는 8bit이다. 따라서 16진수로 2개(?)를 저장할 수 있다. 0xE3 이렇게.. 4bit는 0~15(F)를 표현할 수 있기 때문에 아무튼 어떻게 저장되는지 출력을 해보자. char type은 1byte이기 때문에 이..
#include /* 16진수 10 : A 11 : B 12 : C 13 : D 14 : E 15 : F */ void main(void) { int *p, *q; p = (int *)0x1008; q = (int *)0x1000; // 주석처리된 부분은 에러가 발생한다. // printf("%X\n", p*q); // printf("%X\n", p/q); // printf("%X\n", p+q); printf("%X\n", p-q);// 2 -> 포인터 사이의 뺄셈은 간격을 의미한다. 주소와 데이터 타입 고려 printf("%X\n", q-p);// FFFFFFFE -> -2 // printf("%X\n", p*2); // printf("%X\n", p/2); printf("%X\n", p+2);// ..
// pointer 와 선치 후치 연산자 // source.cpp #include #include int main() { int cnt = 0; char *p = "Embedded"; while (*p) { if (*p++ != 'd') {// *++p 의 경우와 비교를 한다. cnt++; } else { break; } } printf("%d\n", cnt); system("pause"); } /* 출력 : 4 *p++ 같은 경우에는 먼저 내용을 꺼내고 p를 증가시킨다. -> E부터 비교 *++p 경우에는 먼저 주소를 증가시키고 그 주소의 내용을 꺼낸다. -> 이 경우에는 m부터 비교 -> 출력 : 3 (*p)++ 경우에는 먼저 내용을 꺼내고 내용의 결과를 1 증가시킨다. */ // 추가로 (*p)++..
staticFunc1.cpp #include #include extern void func(void); static int sqr(int a) { return a*a; } void main(void) { func(); printf("%d\n", sqr(3)); system("pause"); } staticFunc2.cpp #include static int sqr(int a) { return a * a * 2; } void func(void) { printf("%d\n", sqr(3)); } 함수에도 static이 적용된다. 출력은 18 9각각의 파일에 static int sqr(int a) 함수가 있기 때문에 그 함수을 실행한다
- Total
- Today
- Yesterday
- canny
- laplacian of gaussian
- mean filter
- canny operator
- equalizing
- hough transform
- morphological operation
- erosion
- black top hat
- pyrDown
- upsampling
- Low pass filter
- adaptive thresholding
- pyrUp
- segmentation
- high pass filter
- median filter
- morphology
- OpenCV
- bilateral filter
- gradient
- Sobel
- 캐니 엣지
- Line Detection
- dilation
- 영상처리
- Filter
- direction detection
- difference of gaussian
- top hat
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |