본문 바로가기

전체 글

(8)
포인터4 (포인터의 대입) 포인터의 덧셈 포인터에 +1했을 때 주소값이 +1 되는 것이 아니다. 만약 int형의 주소를 가진 포인터에 +1을 하면 4바이트 즉, 주소에 4만큼이 더해진다. 다른 형에도 같은 원리로 더해지고 뺄셈도 이와 같다. pa 의 값 : 0x7ffcf64a2e04 //int형의 포인터 (pa + 1) 의 값 : 0x7ffcf64a2e08 pb 의 값 : 0x7ffcf64a2e03 (pb + 1) 의 값 : 0x7ffcf64a2e04 pc 의 값 : 0x7ffcf64a2e08 (pc + 1) 의 값 : 0x7ffcf64a2e10 포인터 끼리 덧셈은 안되지만 뺄셈은 된다. 덧셈이 안 되는 이유는 두 변수의 메모리 주소를 더해서 나오는 값은 이전에 포인터들이 가리키던 두 개의 변수와 아무런 관련이 없는 메모리 속의 ..
포인터3 (포인터의 덧셈) 포인터의 덧셈 포인터에 +1했을 때 주소값이 +1 되는 것이 아니다. 만약 int형의 주소를 가진 포인터에 +1을 하면 4바이트 즉, 주소에 4만큼이 더해진다. 다른 형에도 같은 원리로 더해지고 뺄셈도 이와 같다. pa 의 값 : 0x7ffcf64a2e04 //int형의 포인터 (pa + 1) 의 값 : 0x7ffcf64a2e08 pb 의 값 : 0x7ffcf64a2e03 (pb + 1) 의 값 : 0x7ffcf64a2e04 pc 의 값 : 0x7ffcf64a2e08 (pc + 1) 의 값 : 0x7ffcf64a2e10 포인터 끼리 덧셈은 안되지만 뺄셈은 된다. 덧셈이 안 되는 이유는 두 변수의 메모리 주소를 더해서 나오는 값은 이전에 포인터들이 가리키던 두 개의 변수와 아무런 관련이 없는 메모리 속의 ..
포인터1 (기본) 포인터는 메모리 상에 위치한 특정한 데이터의 (시작)주소값을 보관하는 변수. 단항 연산자 a& b; a& 와 같이 피연산자가 1개인 & 연산자는 단항(unary)연산자라 한다. %p 뜻 printf("%p \n", &a); 위 문장에서 &a 의 값을 **16 진수 형태(%p)**로 출력하라고 명령하는 것. 출력된 결과는 8바이트(16진수로 16자리)가 아니다.... 왜 그럴까?이유는 앞의 0이 잘린 것이다. 주소값은 언제나 8바이트 크기, 즉 16진수로 16자리 인데 앞에 0이 잘려서 출력이 안된 것일 뿐이다. 따라서 변수 a의 주소는 아마도 0x00007ffe37d03104 가 될 것이다. ex) 0x7ffe37d03104 역참조연산자p = &a; *p = 3; p 를 통해 p 에 저장된 주소(변수 a..
함수 인자 인자, 흔히 매개변수 혹은 파라미터라고도 불린다. 선언시에는 자료형과 변수명으로 이루어지며, 실제 사용할 때에는 해당 자료형에 맞는 변수나 상수가 들어가게 된다. 선언시 int sum(int a, int b); int output(); 실제 사용시 c = sum(1, 2); c = output(); sum()은 int형 인자 2개로 선언이 되었으므로 두개를 넣어주었고, output()은 인자가 없으므로 넣어주지 않고 실행을 하였다. 위의 인자가 없는 output()과 같은 경우는 명시적으로 int output(void); 와 같이 ‘void’를 넣어 선언할 수도 있다. 반드시 붙일 필요는 없다.
함수호출방식에 대해서 c언어에서 함수 인자 전달은 원칙적으로 모두 call by value이지만, 포인터를 사용하여 call by reference를 구현할 수 있다고 본다. 함수호출방식 값에 의한 호출 call by value 포인터에 의한 호출 call by pointer 참조에 의한 호출 call by reference 1. 값에 의한 호출 Call by value call 호출하다 by ~으로 value 값. 즉 함수를 호출할 때 값으로 호출하는걸 말한다. 예시 코드 #include int sum(int a, int b); int main() { int total = sum(3, 5); return 0; } int sum(int a, int b) { return a + b; } temp 를 이용해서 값을 바꾸고 싶을 ..
함수에 대해서 인자 인자, 흔히 매개변수 혹은 파라미터라고도 불린다. 선언시에는 자료형과 변수명으로 이루어지며, 실제 사용할 때에는 해당 자료형에 맞는 변수나 상수가 들어가게 된다. 선언시 int sum(int a, int b); int output(); 실제 사용시 c = sum(1, 2); c = output(); sum()은 int형 인자 2개로 선언이 되었으므로 두개를 넣어주었고, output()은 인자가 없으므로 넣어주지 않고 실행을 하였다. 위의 인자가 없는 output()과 같은 경우는 명시적으로 int output(void); 와 같이 ‘void’를 넣어 선언할 수도 있다. 반드시 붙일 필요는 없다.
정보량에 대해서 비트가 1개 있으면 상태를 나타낼 수 있는 자리가 1개 있다는 거고 켜짐과 꺼짐 즉, 1 0 을 표현 할 수 있다. 비트가 2개 있다면 2 곱하기 2를 해서 4가지를 표현할 수 있다. 비트가 8개 모아둔 거를 1바이트라 한다. 1바이트는 2의 8승 의 데이터를 가진다. 보통 컴퓨터에서 64비트로 작동되는데 그러면 모두 주소값의 크기가 64비트 (8비트가 1바이트니깐 즉, 8바이트. 즉 주소값이 0x0000000000000000~0xFFFFFFFFFFFFFFFF 까지 값을 가진다는 것이다.)(64비트는 2^64니깐 (2^4)^16, 그래서 주소값이 16자리수인거다.) 그러면 데이터의 주소값의 가지수는 무조건 8바이트 단위로 끊어서 할당해주는데... 예를 들어 int형 은 4바이트의 데이터를 가지니깐 나머지..
진법에 대해서 흔히 쓰이는 2진수는 o과 1로만 이루어져있다. 그렇다면 8진수, 10진수, 16진수는 어떻게 이루어져있을까? 2진수: 0과 1로의 숫자 조합 8진수: 0~7의 조합 10진수: 0~9의 조합 16진수: 0~9,ABCDEF의 조합