2013-07-18 7 views
0

신고의 경우;여기에 한정자 정적이 적용된 이유를 모르겠습니까?

const int *p; 

지정자 constint 즉, p 가리키는 오브젝트에 적용된다.
성명 (년 6 월, 임베디드 시스템 프로그래밍)과 관련하여;

일부 선언 지정자는 선언자 -id의 형식에 기여하지 않습니다. 그들은 선언자 -id에 직접 적용되는 다른 의미 정보를 지정합니다. 예를 들어, 지역 :

static unsigned long int *x[N]; 

키워드 staticunsigned long int 개체에 적용하지 않는 x 점에서 포인터가된다. 오히려 x 자체에 적용

--------------------------- 
/ \     /\ 
static unsigned long int * x [N]; 

x정적 객체임을 선언"부호 길이 INT 포인터의 N 소자 어레이."의

static이 (가) x에 적용되는 이유를 모르겠습니까?

+1

''unsigned long int *'에'static'을 적용 할 수 있습니까?하지만'x'에는 적용 할 수 있습니까? 대답이 "no"이면 순서는 중요하지 않습니다. 왜냐하면'static'과'const'는 두 가지 다른 것들입니다. 'const'의 경우에는 다릅니다 :'const int * p'는'int * const p'와 같지 않습니다. –

+0

무엇을 적용 할 것으로 예상됩니까? –

+2

변수'x'는 배열 타입을가집니다 (이것은'unsigned long * [n]'부분입니다, 더 정확하게 그것은 unsigned long에 대한'n' 포인터의 배열입니다.)'static'은 타입과 아무런 관련이 없습니다 : it 다른 것들은'extern','auto','register'입니다.이 책이 불분명하다면 다른 책을 읽길 원할 수도 있습니다. http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list –

답변

1

static은 유형에 적용 할 수 없습니다. 정적은 x의 저장 위치/가시성에 적용됩니다 (선언 된 위치에 따라 다름)

1

저장소 클래스 지정자와 유형 한정자는 완전히 다른 것입니다. 타입 한정자 (const, volatile 또는 restrict)는 (typedefexternstatic, auto 또는 register)은 선언의 일부 스토리지 클래스 지정자 반면, 유형의 일부이다. 당신이 C99을 참조하는 경우

6.7.1 스토리지 클래스 지정자6.7.3 타입 한정자를 참조하십시오.