분류 전체보기
-
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..
-
포인터와 배열C, C++ 2018. 12. 13. 11:46
배열은 배열 자체로 주소값 배열명 = 배열의 첫번째 방 주소값 array = &array[0]*array = array[0] char str [] = "korea"; "korea" 도 주소상수로 취급됨! char*p = str; 이지만...char* p = "korea"; 도 가능함 &array 는 엄밀하게는 2차원이지만 출력하면 &array[0]의 값이 출력됨그러나 대표하는 값이 다름 전자는 배열 전체의 대표주소값이고 후자는 배열의 첫번째 값의 주소값임 int iarr[5] = {1,2,3,4,5}; //배열의 포인터 표현 방식이 가능함! //printf("%d, %d\n", *iarr, iarr[0]); // iarr = &iarr[0], *iarr = iarr[0] // 주소연산은 +,- 밖에 안됨..
-
포인터C, C++ 2018. 12. 12. 18:45
포인터의 표기법 * 을 이용 ( *의 개수가 차원의 차수를 의미) _____좌_______= ______우_______대입연산자의 경우 좌 우의 차원이 동일해야 오류가 나지 않음!*이 붇으면 차원이 하나 올라감 1차원! 1. 선언하는 경우 (오른쪽에 붙여줌) : 차원을 높여줌예) int a = 2; (둘 다 0 차원임) int* ap= &a; (둘 다 1차원임-- 주소값을 의미함) 2. 실행하는 경우 (왼쪽에 붙여줌) : 차원을 낮춰줌 ap라는 포인터변수의 주소값의 위치로 찾아가서 그 주소값에 있는 값을 꺼내와라라는 뜻 예) printf(" %d" , *ap); ----> 포인터 변수 ap가 가지는 주소값으로 이동하여 그 주소값이 가리키는 값을 꺼내오니까 '2' 를 출력함 차원에 대한 이해 ? call ..