" async="async"> ', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); 책 알려주는 남자 :: 쉽게 풀어쓴 C언어 Express 11장 Exercise

11장 Exercise


1. (a) 처럼 바꾸시오

(a) list[6] -> *(list+6)
(b) name[3] ->*(name+3)
(c) *(cost+8) -> cost[8]
(d) message[0] -> *message

비고) a+i는 &a[i]와 같고, *(a+i)는 a[i]와 동일하다


2. 알맞은 문장 넣기

char code;
char *p;        // char형 포인터 p선언
p=&code;     // 포인터에 변수 code의 주소 대입
*p='a';          // 포인터를 통하여 변수 code에 'a' 대입하기


3. int a[]={10, 20, 30, 40, 50}으로 정의되었다고 가정할 때, *(a+2)의 값은?     ③30


4. 아래의 문장이 실행되었을 때 다른 문장들과 실행 결과가 다른것은?         ③*p++

int i;
int *p=&i;

비고) ③*p++은 p가 가르키는 i값을 가져오고 p를 1증가시키는 것이다.
        ①②④ i를 1 증가한다.
        int *p=&i;  =  int *p;  +  p=&i;


5. 다음 프로그램의 출력은?                                5, 6

 int x=6;
int *p=&x;
printf("%d\n", --(*p));
printf("%d\n", (*p)++);


6. 다음 프로그램의 출력은?                             1008, 2008

int *p = (int *)1000;
double *q = (double *)2000;
printf("%d\n", p+2);
printf("%d\n", q+1);

비고) 결과값 : x+sizeof(x)*integer


7. 다음 프로그램의 출력은?                         0, 1, 2   

int list[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *p;
p=list;
printf("%d\n", *list);
printf("%d\n", *p+1);
printf("%d\n", *p+2);

비고) %d대신 %x로 바꾸고 *을 제거하면 주소들이 출력된다.


8. double형 배열을 매개 변수 a로 전달받는 함수 print_array()의 헤더를 다음과 같은 방법으로 작성하라. 반환값은 없다.

 (a) b를 배열로 선언 

 print_array(double a[]);

 (b) b를 포인터로 선언

 print_array(double *a); 


9. 다음 프로그램에서 ip의 값이 변경되지 않는 이유는 무엇인가?

void f(int *p)
{
static int data 5;
p=&data;
}

int main()
{
int*ip=NULL;
f(ip;)
}


모든 변수는 메모리에 값을 저장한다. 주소로 각각의 위치를 구별하여 저장하며 포인터 변수는 메모리의 주소를 지정하는 값을 가진다. 정적변수 역시 메모리에 배치되고 주소값을 가진다. 그러나 기계어 코드에 주소값을 고정하여 액세스된다. 즉 정적변수를 가르키는 포인터는 가르키는 주소값이 정적변수에 의해 고정되어 변경되지 않게 된다.


블로그 이미지

얼음꿀차

책을 한 번 읽긴 읽어야겠는데 막상 읽자니 뭘 읽을지 고민되는 당신을 위해 읽을만한 책들을 알려드립니다!

,