-
배열은 배열 자체로 주소값
배열명 = 배열의 첫번째 방 주소값
array = &array[0]
*array = array[0]
char str [] = "korea";
"korea" 도 주소상수로 취급됨!
char*p = str; 이지만...
char* p = "korea"; 도 가능함
&array 는 엄밀하게는 2차원이지만 출력하면 &array[0]의 값이 출력됨
그러나 대표하는 값이 다름 전자는 배열 전체의 대표주소값이고 후자는 배열의 첫번째 값의 주소값임
int iarr[5] = {1,2,3,4,5};
//배열의 포인터 표현 방식이 가능함!
//printf("%d, %d\n", *iarr, iarr[0]); // iarr = &iarr[0], *iarr = iarr[0]
// 주소연산은 +,- 밖에 안됨! ==> +1 은 자기자신의 값(byte) 만큼 더해라 라는 뜻...
for(int i = 0; i < 5; i++)
{
printf("%d \n", *(iarr+i)); /// 포인터를 이용한 배열표현
}
printf("%d, %d \n", &iarr, iarr); // 배열 자체(전체 사이즈의 주소값), 과 첫번째 배열의 주소값을 나타냄
(= 출력되는 주소값은 동일)
함수를 이용한 배열의 출력시 주의할 점
*배열은 매개변수로 전달되지 않음! 그리고 배열은 주소값이라서 결국 포인터 변수(=주소값)으로 받게 된다..
void output(int* iary, int len){printf("size of iray: %d\n", sizeof(iary)); //포인터가 가지는 사이즈는 unsigned int라서 4byte 고정임..printf("size of *iray: %d\n", sizeof(*iary)); // 포인터가 가리키는 값의 사이즈// 포인터가 가지는 주소값을 따라가서 나오는 값을 출력하라고 하니까 int가 4byte 라서 4가 출력.// c에서는 꼭 배열의 크기도 같이 보내야함 ...함수 안에서 배열의 크기를 찾아내는것이 어려움!for(int i = -2; i < len-2; i++){ // 자바와 다르게 배열인덱스를 -값을 주는것이 가능printf("%d\n", *(iary+i));}}int main(int argc, char const *argv[]){int iary[] = {1,2,3,4,5};int len= sizeof(iary)/sizeof(iary[0]);output(&iary[2], len); // 2번째 방을 보냈으니 출력을 위해선 그만큼 빼줘야...//output2(iary2);'C, C++' 카테고리의 다른 글
2차원 배열 (0) 2018.12.14 포인터 얕은 복사 깊은 복사 (0) 2018.12.13 포인터 (0) 2018.12.12 함수의 선언과 사용 (2) 2018.12.12 [IEEE 754] 부동소수점과 바이어스 표현법 (0) 2018.12.12