배열과 포인터

C : 2007. 11. 3. 11:39

C에서는 배열을 함수에 전달할수 없으며, 단지 배열에 대한 포인터만 전달할 수 있다.

포인터 = 배열의 0번째 주소.


#연산자 우선순위

()   >  ++   >   *   >   +


p.206
#include <stdio.h>
int main(void)
{
 int a[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
 int *p;

 p=a;

 printf("%d %d %d\n", *p, *(p+1), *(p+2));  //포인터p가 가리키는 값 증가.

 printf("%d %d %d\n", a[0], a[1], a[2]);

 return 0;
}


p.207
#include <stdio.h>
int main(void)
{
 char str[] = "Pointers are fun";
 char *p;   //포인트 변수선언
 int i;

 p = str;     //포인트변수p의 배열변수str에 주소치환

 for(i=0; p[i]; i++) printf("%c", p[i]);

 return 0;
}

*

#include <stdio.h>
int main(void)
{
 char str[] = "hello";   //char *p =  "hello";  

 char *p;                    //문자열의 포인터가 되는 0번째 배열의 주소만

 p = "hello";                //참조하기 때문에 가능한 문법.
 p = str;

 puts(p);
 return 0;
}


*배열명은 상수이므로 증감시킬수 없다.


p.209
#include <ctype.h>           //toupper(), tolower()함수 사용
#include <stdio.h>

int main(void)
{
 char str[80];
 int i;

 printf("Enter a string: ");
 gets(str);

 for(i=0; str[i]; i++) str[i] = toupper(str[i]);   //대문자로 바꾼다.

 printf("%s\n", str);

 for(i=0; str[i]; i++) str[i] = tolower(str[i]);   //소문자로 바꾼다.

 printf("%s\n", str);

 return 0;
}


p.210
#include <ctype.h>                 //toupper(), tolower()함수 사용
#include <stdio.h>

int main(void)
{
 char str[80], *p;

 printf("Enter a string: ");
 gets(str);


 p = str;

 while(*p) {          //포인터 p가 널값을 가리키게 되면 반복 중지
  *p++ = toupper(*p);
 // p++;            //포인터 p 증가
 }

 printf("%s\n", str);


 p = str;

 while(*p) {
  *p = tolower(*p);
  p++;
 }

 printf("%s\n", str);

 return 0;
}


  *p++ = toupper(*p);

-> ++가 p다음에 오기 때문에 p가 가리키는 값을 먼저 얻을 수 있고,

   그 다음 p가 다음 원소를 가리키기 위하여 증가된다.


p.211
#include <stdio.h>
#include <string.h>
int main(void)
{
 char str1[] = "Pointers are fun to use";
 char str2[80], *p1, *p2;

 p1 = str1 + strlen(str1) -1;
 p2 = str2;

 while(p1>=str1) *p2++ = *p1--;
 *p2 = '\0';

 printf("%s %s", str1, str2);

 return 0;
}


p.212_2
#include <stdio.h>

int main(void)
{
 int temp[5] = {10, 19, 23, 8, 9};
 int *p;

 p = temp;

 printf("%d ", *(p+3));

 return 0;
}


p212_3
#include <stdio.h>
int main(void)
{
 char str[80], *p;

 printf("enter string : \n");
 gets(str);

 p = str;

 while(*p && *p != ' ') p++;  //p가 공백을 가리키지 않으면 p를 증가시킨다.
 printf("%s", p);

 return 0;
}

Posted by 청웨일