구조체 포인터에 문자 배열의 주소를 부여해도 괜찮습니까?배열 주소에 대한 구조체 포인터
typedef struct {
int ID;
word32 Myports;
stripports gd[256] ;
}Table;
typedef struct {
oldxmd used;
newip ip;
newxmd new;
}stripports;
char buffer1[256];
Table *tableptr = buffer1 ;
tableptr ->ID = 15 ;
tableptr ->Myports= somenumber ;
tableptr ->gd[0].used = somenumber ;
힘든 부분은 내가 tableptr가 배열 시작 주소를 받아 들일 이유에 관계 할 수없는 오전입니다! 최선의 방법은 위의 코드가 정확하지 않거나 안전하지 않다는 것입니다.
캐스팅은 나중에 채택되었지만 배열을 허용하는 이유는 무엇입니까?
Table* tableptr = (Table*)buffer1;
Table *tableptr = buffer1 ;
따라야 많은 테스트 Table* tableptr = (Table*)buffer1;
에 의해 대체되었다.
캐스팅하지 않고 struct
포인터가 새로 만든 pointee의 주소가 아닌 다른 값을 취할 수 있습니까 struct
?
필자는 저장소에있는 많은 저자가 작성한 일련의 테스트를 가지고 있으며 그 테스트는 매우 혼란 스럽다.
에
을 변경하지만, 직접 버퍼를 수정하려고에 의해 극복 될 수있다 behvaior. – Antimony
버퍼가 '테이블'로 사용되도록 올바르게 정렬되었는지 확인하기 위해 수행 된 작업이 없으므로이 코드는 안전하지 않은 것처럼 보입니다. – Mankarse
그리고'Table'은 버퍼보다 커서 위험한 것처럼 보입니다. – jv42