목록C (47)
NULL
포인터 배열은 ?배열에 포인터변수나주소값이 들어있는것이다. 포인터 배열선언도 일반 배열 선언과 똑같다.다만 인덱스값들이 주소값을 가지고있으니접근을 해야되므로 배열선언을 할때 *를 붙여주자. 문자열 역시 마찬가지다.문자열 포인터 배열안에 문자열이 있고포인터 문자열은 메모리공간에 할당되니주소값과 같고 고로 주소값인셈이다. 포인터 배열은포인터 배열 선언하고 안에 주소값이 있다.이게 전부이다. 인덱스에 들어있는 주소값을포인터배열로 접근하는방식.
문자열 배열과 문자열 포인터에 대해서 먼저 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..
전역변수라는 것은 ? 어느영역이든 접근가능하고프로그램시작과 동시에 메모리공간이할당되어 종료전까지 데이터가 소멸할일없다. 허나, 너무많이써버리게되면프로그램이 복잡해져버린다. 프로그램을 복잡하게 만드는 주범이다. 스파게티코드가 되지않게 꼭 써야할때만 쓰고왠만하면 쓰지않는게 적합하다. 전역변수는 기본적으로 0으로 초기화된다. static변수 라는것은 ? 선언된 함수 내에서만 접근이 가능하다. 딱 1회만 초기화되고 프로그램 종료 시까지메모리 공간에 존재한다. 이 말은 static변수가 1회 할당이 되고 나서해당함수내에서 static변수는 사라지고메모리영역에 남아서 값이 유지된다. 만약 초기화하지않아도 0으로 초기화된다. static지역변수는 전역변수보다 상대적으로 안정적이다. 그 이유는 ?전역변수는 어디서든지 ..
지역변수는함수의 몸체인 중괄호를 말합니다. 함수의 시작과 끝은 중괄호로 시작해서중괄호로 끝나게 됩니다. int main(매개변수){ 지역변수 } 그런데 매개변수도 지역변수에 해당됩니다. 변수로 예를 들어보자면 지역변수라는것은 a라는 지역에서num이라는 변수를 선언하면a라는 지역에서만 쓸수있습니다. b라는 지역에서 num을 전혀누군지 못알아봅니다. 그리고 b에서도 똑같이 num이라는 이름으로변수를 선언할수있지만. 둘중 전혀 다른 존재입니다.메모리주소값마저 다릅니다. 만약 a지역에 있는 num을b에서도 사용하고싶다면 함수로 인자를 전달받는다면값을 전달받을수있습니다. 한마디로자기지역안에서만 그 역할을 한다입니다.
함수를 만드는 이유는 main함수에 전부 소스를 정의하면복잡 할 뿐더러큰 문제의 기능을 한번에 정의하는거보다 기능을 조각조각쪼개서 정의하는것이 더 좋다. 함수하나마다 하나의 기능을하게 디자인해야한다. 함수의 자료형은 반환형태이며void가 아닌 자료형이 오면값을 반환할 목적이니return으로 값을 반환한다. 그다음 함수이름을 지정해주고 입력형태에는 매개변수가 들어오고인자를 받는 역할을 한다.( )괄호안에 위치해야되는것은 매개변수라고 한다. 매개는 둘 사이에 양편의 관계를 맺어준다는 뜻이다.매개변수도 마찬가지로 함수간에 변수관계를 맺는 역할이다. 그 후 이 그림을 보고각자의 위치마다 어떤 기능을 하는지재대로 이해 한 후 다음 이미지를 보면이해가 쉬울것이다. 쉽게 풀어 쓰자면 함수를 짤때 첫번째로값을 반환하는..