2015년 7월 7일 화요일

20150708 포인터와 함수에 대한 이해

★참조 http://jsy6036.tistory.com/entry/%ED%8F%B0-%EB%85%B8%EC%9D%B4%EB%A7%8C-%EA%B5%AC%EC%A1%B0%EC%99%80-%ED%95%98%EB%B2%84%EB%93%9C-%EA%B5%AC%EC%A1%B0
1. 폰 노이만 구조
2. 하버드 구조

최적화된 c프로그래밍 = 속도가 빠를지 메모리를 적게사용할지를 고려해서 코드작성
프로그래밍을 할때 버스와 같은 크기의 자료형을 사용하는것이 가장좋다!
(버스보다 작은 크기의 자료형을 선언하면 메모리에 저장시 남는부분을 막아야 하기때문)

★매개변수로 배열을 선언할수 없다!

void arr(int arr[]) // 매개변수선언시 배열형식으로 선언가능
배열의 주소값이 인자로 전달될시 int arr[]형태의 선언을주로 많이 사용한다. 하지만 이둘이
같은 선언으로 간주되는 경우는 매개변수의 선언으로 제한된다. 따라서 다음의 코드에서,
int main(void) {
int arr[3]={1, 2, 3};
int *ptr=arr; // int ptr[]=arr; 로 대체 불가능
}
★함수 내에서는 인자로 전달된 배열의 길이를 계산할수 없다!
배열의 주소값을 인자로 전달받는 매개변수는 포인터 변수이기 때문에 이를 대상으로 sizeof 연산을 할 경우 배열의 크기가 반환되지 않고 포인터변수의 크기가 반환된다.
이렇듯 함수 내에서는 인자로 전달된 배열의 길이를 계산할 수가 없기 때문에
배열의 크기나 길이 정보도 함께 인자로 전달해야한다.

명확하게 말하면 Call-by-reference는 c에는 존재하지 않는다.(참조가 아닌 값 교환)
Call-by-reference 사용예
1. 배열의 크기(길이?)계산 불가
2. 데이터의 값을 수정
3. 데이터의 용량의 크기가 너무 클때

목적의식을 가지고 Call-by-value를 쓸지 Call-by-reference를 쓸지 판단해야 한다!

포인터 대상의 const 선언
const가 *을 기준으로 왼쪽은 가리키는 곳 오른쪽은 변수 둘다일경도 있음

댓글 없음:

댓글 쓰기