ETC/[C, C++]
-
[C,C++] C에서 함수의 데이터 전달 방법(Call-by-Value, Call-by-Reference)ETC/[C, C++] 2022. 4. 25. 00:24
값을 전달하는 법(Call-by-Value) ex) 매개변수의 값을 증가시키는 함수 1. 증가할 값의 복사본을 매개변수로 넘겨주고 2. 함수에서 새로운 주소에 있는 변수에 그 값을 입혀서 연산을 진행한 다음 3. 반환 값이 있을 시 그 증가된 값을 기존 변수에 저장. 기본적으로 함수를 호출할 때 데이터를 전달하는 방법은 값의 복사본을 주고 사용하고 다시 받아오는 방법이다. 주소를 전달하는 법(Call-by-Reference) void adding(int *pa){ *p+=5; } int main(){ int a=0; adding(&a); printf("%d\n",a);/5 } 이것도 사실 참조자가 아니라 주소를 가지고 넘기는 것이기 때문에 Call-by_Reference라 보기 어렵고 이것 또한 Call..
-
[C,C++] 변수의 종류(지역, 전역, 정적 ,레지스터)ETC/[C, C++] 2022. 4. 24. 23:55
지역변수 함수 내 시작 부분에서 선언 함수가 끝날 때까지 사용 가능 함수가 호출돼서 명령이 실행되면 메모리에 잡혔다가 함수가 반환될 때 사라짐. 자동 초기화는 되지 않고 쓰레기 값이 있음. int main(){ int a=3, b=8; printf("%d, %d\n",a,b);//3 8 {//지역변수 temp 설정 int temp; temp=a; a=b; b=temp; } printf("%d, %d\n",a,b);//8 3 return 0; } 두 값을 바꾸려고 {} 안에서 temp라는 변수를 임시적으로 사용하는 모습. 전역 변수 함수 바깥에서 선언, 프로그램 시작할 때 저장공간 확보되고, 끝날 때 저장공간 사라짐. 선언하면 자동으로 0으로 초기화됨. 모든 함수들이 자유롭게 데이터 공유 단점 프로그램 오..
-
[C,C++] 문자열 함수(strcpy, strncpy, strlen, strcat, strncat, strcmp, strncmp)ETC/[C, C++] 2022. 4. 22. 22:03
strcpy() #include char str1[20]="watermelon"; char str2[20]="orange"; char *sp1="melon"; char *sp2=str2; printf("%s\n",str1); //strawberry strcpy(str1,"orange");//첫번째: 저장할 위치, 두번째: 복사할 문자열의 위치 strcpy(str1,str2);//orange strcpy(str1,sp1);//melon strcpy(str1,sp2);//orange strcpy(sp2,sp1);//melon printf("%s\n", strcpy(str1, "orange")); //orange strcpy() 두 번째 인자에 문자열을 넣어줘도 어차피 첫 번째 문자의 주소로 바뀌니까 문자열을..
-
[C,C++] 문자열과 포인터ETC/[C, C++] 2022. 4. 22. 21:05
포인터와 문자열 출력(printf) int main(){ printf("%s", "rain"); } 컴파일러는 rain을 문자열 자체로 처리하는 것이 아닌 별도의 메모리에 보관을 하고, 시작 위치 값으로 처리해버린다. [0] [1] [2] [3] r a i n \0 문자열은 그래서 항상 첫번째 문자의 주소 값으로 바뀌게 된다. int main(){ printf("%c", *"rain"); } 문자열은 주소 값이니까 간접 참조 연산자 *를 붙일 수 있게 된다. 따라서 출력 값: r int main(){ printf("%c", *("rain"+3)); } 주소에 + 3을 하게 되면 가리키는 공간의 형태(char) 만큼 곱해서 더해짐. r의 주소 값 +(3*4)가 되는 것이다. 따라서 출력 값: n 여기서 *..