1. struct 은 call by value로 값을 전달한다.그래서 함수의 인자값으로 넘길 때 주소값으로 넘겨야 속도가 빠르다.
struct에서는 -> 연산자가 있다. 이것은 포인터 struct을 위한 연산자이다.
struct st
{
int a;
char b;
}x={10,'k};
struct st *p=&x;
라고 보자.
x.a == p->a; 는 값다.
sizeof(x) == 8
이제 배열의 등가 포인터를 보자.
2차원 배열을 보면 주소가 가리키는 타입이 중요하다는 것을 알 수 있다.
int a[3][4];
에서 a[0]이 가리키는 타입은 int*[4] 이다. a+1은 배열의 첫 요소의 ++ 이니 a의 주소의 + 4 이다.
int (* func(void) )[4]
{
static int a[3][4];
return a;
}
void main()
{
printf("%d",*(*(func()+1))+2);
}
가만히 보면 2차원 배열은 stack이 쌓이는 모습을 생각해야 한다. * 가 가리키는 곳과 *p+1 (*p)+1, *(p+1) 같은 것을 잘 분별해야 한다.
3.void * 는 단독으로 사용이 안되지만 어떤 타입이라도 받을 수 있다.
4.int *(*a[3])[4] 의 메모리 분석을 할 수 있을까?
a[0]과 *a[0]의 차이를 알 수 있는가?
a[0]은 int*(*)[4]를 가지고 있는 포인터이고, *a[0]은 배열을 int *[4]를 가리키는 배열이다. 때문에 *a[0]은 배열타입이다. 두 개의 값은 같지만 타입이 다르다.
5.오늘의 하이라이트 포인터 억세스 연습
#include<stdio.h>
char *c[]={"ENTER","NEW","POINT","FIRAT"};
char **cp[]={c+3,c+2,c+1,c};
char ***cpp=cp;
void main(void)
{
printf("%s",**++cpp);
printf("%s ",*--*++cpp+3);
printf("%s",*cpp[-2]+3);
printf("%s",cpp[-1][-1]+1);
}
를 푸는 것이다.
배열 안에 변수가 들어가서 좀 헷갈린다. 이것은 포인터의 개념을 확실히 알 수 잇는 문제인 것 같다.
스택을 그리고 분석을 해보자..
struct에서는 -> 연산자가 있다. 이것은 포인터 struct을 위한 연산자이다.
struct st
{
int a;
char b;
}x={10,'k};
struct st *p=&x;
라고 보자.
x.a == p->a; 는 값다.
sizeof(x) == 8
이제 배열의 등가 포인터를 보자.
2차원 배열을 보면 주소가 가리키는 타입이 중요하다는 것을 알 수 있다.
int a[3][4];
에서 a[0]이 가리키는 타입은 int*[4] 이다. a+1은 배열의 첫 요소의 ++ 이니 a의 주소의 + 4 이다.
int (* func(void) )[4]
{
static int a[3][4];
return a;
}
void main()
{
printf("%d",*(*(func()+1))+2);
}
가만히 보면 2차원 배열은 stack이 쌓이는 모습을 생각해야 한다. * 가 가리키는 곳과 *p+1 (*p)+1, *(p+1) 같은 것을 잘 분별해야 한다.
3.void * 는 단독으로 사용이 안되지만 어떤 타입이라도 받을 수 있다.
4.int *(*a[3])[4] 의 메모리 분석을 할 수 있을까?
a[0]과 *a[0]의 차이를 알 수 있는가?
a[0]은 int*(*)[4]를 가지고 있는 포인터이고, *a[0]은 배열을 int *[4]를 가리키는 배열이다. 때문에 *a[0]은 배열타입이다. 두 개의 값은 같지만 타입이 다르다.
5.오늘의 하이라이트 포인터 억세스 연습
#include<stdio.h>
char *c[]={"ENTER","NEW","POINT","FIRAT"};
char **cp[]={c+3,c+2,c+1,c};
char ***cpp=cp;
void main(void)
{
printf("%s",**++cpp);
printf("%s ",*--*++cpp+3);
printf("%s",*cpp[-2]+3);
printf("%s",cpp[-1][-1]+1);
}
를 푸는 것이다.
배열 안에 변수가 들어가서 좀 헷갈린다. 이것은 포인터의 개념을 확실히 알 수 잇는 문제인 것 같다.
스택을 그리고 분석을 해보자..
TAG C언어
Comment 0