목록분류 전체보기 (220)
NULL
const가 자료형앞에 선언되면포인터변수가 가리키는 값을변경하지않는다. const가 포인터변수앞에 오면 포인터변수의 값을 상수화시키며저장된값은 변경불가능하다.가리키는 대상도 변경할수없다.
함수에 값을 전달한 것과주소값을 전달한 것의 차이는 매개변수에 값을 전달하게 되면? 값이 복사되는것이지 그 값이 실제로전달된것이 아니기때문에 다른함수에서값을 변경하였다고 해도 서로 다른 값이다. 주소값을 함수로 전달하게 되면? 함수에 주소값을 전달하고값을 변경해도 그 주소값에들어있는 값이 변경되는것이고주소값은 동일하기때문에어떠한 함수에서라도 값변경이 가능하다.
인자전달의 기본방식은 값의 복사다. age를 인자로 전달할때 값이age변수로 전달되는게 아니라age의 값을 복사해서 전달한다. C언어는 매개변수로 배열의선언을 허용하지 않는다.배열을 통째로 복사하는 방법은C언어에선 존재하지 않기때문에 그 대신에 배열의 주소값을전달 하는 방식을 취한다. 배열의 이름을 전달하고길이는 sizeof(배열이름)/sizeof(타입)이렇게 하면 길이가 나오게 된다. 매개변수선언에서int * param과 int param[]은동일한 선언이다.뭘 쓰게 되던 포인터이기때문이다.다만 배열로 선언해주는 이유는배열을 넘기는 표현으로 쓴다. 매개변수 의외엔동일하지않으니 주의하자.
포인터 배열은 ?배열에 포인터변수나주소값이 들어있는것이다. 포인터 배열선언도 일반 배열 선언과 똑같다.다만 인덱스값들이 주소값을 가지고있으니접근을 해야되므로 배열선언을 할때 *를 붙여주자. 문자열 역시 마찬가지다.문자열 포인터 배열안에 문자열이 있고포인터 문자열은 메모리공간에 할당되니주소값과 같고 고로 주소값인셈이다. 포인터 배열은포인터 배열 선언하고 안에 주소값이 있다.이게 전부이다. 인덱스에 들어있는 주소값을포인터배열로 접근하는방식.
문자열 배열과 문자열 포인터에 대해서 먼저 str1은 배열 인덱스마다하나씩의 문자가 저장되있다.그래서 변수의 성향을 가지고 있으며수정도 가능하다. 반면 str2는 포인터로된 문자열이다.즉 자동할당된 문자열의 주소 값을 저장한다.포인터 문자열은 문자열을 가리킬수있을뿐수정할수없는 상수성향을 가진다. 포인터 문자열은문자열을 선언한것으로 보이나문자열이 선언된 위치에주소값이 반환된것이다.
포인터 변수와 배열의 차이점! 배열에 첫번째 이름은배열의 첫번째방 주소를 가리키며상수라서 주소값을 변경할수없다. 포인터 변수는주소값 변경이 가능하다. 포인터형을 결정하는 법은 간단하다.각자 맞는 자료형으로 가리키면 된다. 포인터를 배열이름처럼 사용가능하다. 보통 배열이라면 이렇게 연산을 할것이다. 다음 소스를 봐보자. 배열과 배열의 첫번째 값을가리키는 포인터변수는 값이 똑같다. 분석해보면인덱스 3인 int형 arr배열선언arr[0]=15arr[1]=25arr[2]=35값으로 초기화시켰다. int형 포인터변수 ptr선언 후arr의 첫번째값으로 초기화이것은 배열이름을 써준것과 같다. 그 후 arr[0~2]과 ptr[0~2]을출력해보면 실제로 값도 같다. 이유는 ptr은 arr을 가리키고 있고*로 메모리공간을..
포인터라는것은 ? 가리키다라는 의미를 가지고 있다.뜻 그대로 어떠한 데이터를 가리키는 것이다. 포인터의 선언법은 ? int * pnum;선언은 이런 형태다. 여기서 자료형과 변수의 이름 사이에*는 피연산자 사이에 있으면 곱셈. 변수와 변수이름 사이에 있으면포인터의 선언이다.*은 메모리접근의 의미이다. 주의사항은 포인터의 자료형은각자 동일하게 맞는 자료형으로선언해줘야한다. int형은 int형 포인터로double형은 double형 포인터로해줄것. 포인터 사용법은 간단하다. 타입 * 변수이름 = &가리킬변수이렇게 간단하게 선언하면 된다. 포인터변수에 리터럴상수를선언하게 되면 주소가 어딘지알수없기때문에 잘못된 선언이며운영체제의 주소값을건들수잇어서 위험하다. 잘못된 연산을 막기위해선0 또는 NULL로 초기화시켜주자.
문자열 배열은 문자열 배열의 선언은 보기와 같다. char str[14]="Good morning"; 이렇게 선언하고 인덱스부분은굳이 쓸필요 없다는 점을 기억하시구요. 문자열은 제일 뒤에널이라는 문자가 들어갑니다. 이것은 단순히 문자열 배열에서만해당하는것이 아니라모든 큰따옴표를 가진 문자열들은모두 맨뒤에 \0이라는 문자를가지고 있습니다. \0이라는게 어떤 역할을 하냐면문자열의 끝을 의미합니다. 컴퓨터는 0과 1만 있는데문자열을 \0로 구분합니다. 만약 \0이 없다면\0을 만날때까지 문자열을 넘어이상한 값까지 출력이 됩니다. 반드시 써줘야 되는 부분이구요 \0, NULL, 0 3개는 모두 널에 해당합니다. 널 문자는 아스키코드로 0을 나타냅니다. scanf로 문자열을 입력할때&연산자를 붙이지 않아도 되는 ..
배열이라는 것은 변수의 집합이며 배열의 이름은 첫번째인덱스의 주소값을 가리킵니다. 배열을 쓰는 가장 큰 이유는 ? 변수가 대량으로 필요할때다수의 변수를 일일히 선언하기엔시간과 노동이 많이필요하기때문에편리하게 선언하기위함이다. 일단 배열의 사용방법은 ? 자료형 + 배열의 이름 + [배열의 길이];이런식으로 선언합니다. int arr[10]; 배열의 길이는 인덱스라고 부릅니다. 배열을 선언할때는배열의 길이를 정해주는것이고 선언한 이후에 배열에 접근할때는인덱스 값은 0부터 시작한다. int arr[10]; = 0부터 9까지 10개 인것이죠. int arr[10]; - 변수의 집합 배열4바이트크기의 int가 10개 들어있는것입니다. int arr1[5]={1,2,3,4,5} // 배열의 초기화 리스트 할당과 동..
재귀함수는 자기 자신을 호출하는 함수다. 재귀함수의 개념은자기자신의 함수를 실행하면서 자기자신을 복사하는 개념입니다.복사본으로 표현하면 원본에서 자기함수를 만나면 복사되서 복사본1에서 자기함수를 만나면 또 복사되서 복사본2에서 자기함수를 만나면 또 복사가 되서 이렇게 계속 복사가 되는식으로 무한하게 실행된다.그래서 탈출조건을 걸어두고 사용해야한다. 탈출조건의 예 return 값이 0이 되기전까지 계속 재귀하다가0이 되면 결국 차례차례 다시 올라오면서함수가 차례차례 종료되고 원본으로 오면모든 재귀함수가 종료되는것을 볼수있다. 소스로 이해하기 int Factorial(int n){ if(n==0) return 1;else return n*Factorial(n-1)} 팩토리얼 재귀함수다. 만약 n=0이라면 1..