[C언어] 문자열 상수, 포인터 배열 함수

문자열 상수


char str1[5] = "abcd";    //문자열 변수

char *str2 = "ABCD";     //문자열 상수


배열 str1은 문자열 전체를 저장.

포인터 str2는 메모리상에 저장되어 있는 문자열 상수 "ABCD"를 단순히 가리키고만 있음.


문자열 상수는 메모리 공간이 할당되면, 문자열 상수의 주소 값을 반환한다.


문자열을 입력받을땐


scanf("%s", str) 로 str앞에 &를 붙이지 않는다.

왜냐하면은 배열 이름 str은 배열의 주소를 나타내므로, & 연산을 할 필요가 없기 때문이다.





int ArrAdder(int* pArr, int n);


int main(void)
{

int arr[10] = ...;

int sumOfArray;


sumOfArray = ArrAdder(arr, sizeof(arr) / sizeof(int) );

}



sizeof(arr) / sizeof(int) ==> 배열 요소의 개수.



int arr[5 ] ==> sizeof(arr) ==> 20 출력됨

int* pArr = arr; ==> sizeof(pArr) ==> 포인터 이기에 int 형인 4 출력됨.


일반적으로 배열을 인자로 전달받는 함수의 경우, 대부분 배열의 길이도 함께 전달받도록 구현해야한다!



int function(int pArr[]){ }

int function(int* pArr){ }


선언 int pArr[] 와 int *pArr은 완전히 같은 것이다.


다만 인자를 배열로 전달하는 것을 좀 더 명확하게 할 수 있도록 int pArr[] 선언을 허용하는 것이다. 즉, 함수의 매개 변수로 선언한때만 가능!


int main(void)
{

int pArr[] ;//안된다! 함수의 매개 변수로 선언한때만 가능!

}


하지만 매개 변수 선언시에도 int *arr와 같은 선언을 주로 사용하자.