2010-06-04 6 views
1

나는이 질문을 가지고있다 :단어 정렬없이 주소 값을 가져 오는 중입니까?

"char"의 크기가 1 바이트이고 "int"와 "float"의 크기가 4 바이트라고 가정한다.

struct Employee 
{ 
int age; 
char sex; 
char name[25]; 
    float info[3][10]; 
}; 
Employee x; 

의 주소는 무엇 워드 정렬하지 않고, "X"의 ADRESS 1000이라고 가정하여 "[2] [5] x.info"?

참고 :이 책은 숙제가 아니지만 시험을 치고 나는이 와당에 답변했습니다. 나는 정말로 옳은 대답을 알고 싶다.

고맙습니다

+2

인 것 것 매우 낮은 수준이며 언어 별 가능성이 있습니다 ...이 C입니까? – skaffman

+1

x가 무엇인지 - 구조는 말하지 않습니까? 노동 조합? 그 정보 없이는 대답 할 수 없습니다. –

+0

언어가 단어 정렬을 고려하여 주소 값을 얻는 방법을 아는 것이 중요하지 않습니다. – Kristian

답변

0

나는, 다른 언어에 대해 잘 모르지만, C와 C++에서 이것은 2D 배열이 메모리에 저장되는 방법입니다 :

float info[3][10]의 메모리에 3 * 10 = 30 float이 있습니다.

하여 2-D 어레이의 제 1 메모리 위치 (1000) 인 경우 &info[0][0] 즉 다음 &info[2][5] 1000 +는 sizeof (플로트) * (2 * 10 + 5) = 1,100 즉 first_memory_location +를 sizeof (DATA_TYPE) * (row_no 것 * total_no_columns + column_no).

link 봐이 개념을 더 잘

편집을 이해해야한다 : 같은 계산은 구조체 내부의 2 차원 배열을위한 좋은 보유하고 있습니다. 귀하의 경우

는 int로하는 문자 크기 (25)의 문자 배열이되도록하여 = 1,029 &info[0][0]

First_memory_location +를 sizeof (플로트) * (row_no *이 total_no_columns + column_no)

1029 + 4 * (2 * 10 + 5) = 1129

+0

키 응답의 정답은 1129 – Kristian

+0

입니다. 여기서 재어 29의 출처는 – Kristian

+0

2129입니다. 주소가 1000에서 시작한다고 가정하면 struct 크기는 int (4 바이트) + char (1 바이트) + char [25] (25 바이트)이고 float [3] [10] (4 * 3 * 10) = 150입니다. 바이트. 1000 + 150 ... 너의 메모리 주소가 1149를 넘지 않아야한다 – srikanta

0

이 & 정보 [2] [5] 다음 정보 [2] +5 = (숯불

주소 [I가 귀하의 질문에 X가 외계인 우주선 소음이라고 생각합니다] *) 정보 +는 sizeof (플로트) * 2 * 10 + 5 *의를 sizeof (플로트) == (숯불 *) 정보 + 100

를 sizeof (플로트) == 4

+0

입니다. 나는 답을 잃었습니다. – Kristian

+0

어디서 분실하셨습니까? 결과는 100입니다. –

0

이 경우에는 x의 주소 공간뿐만 아니라 모든 변수의 메모리 공간을 함께 추가해야한다고 생각합니다. x의 주소가 1000 인 경우

그래서

, 당신이 원하는 주소는 보통 크기를 가정

1000 
+sizeof(int)   // age 
+sizeof(char)  // sex 
+(sizeof(char)*25) // name 
+(sizeof(float)*2*10) + sizeof(float)*5 // info[2][5] 

에서, 즉이 1000 + 8 + 1 + 25 + 120 = 1154

+0

wronge 대답 srikfreak가 한 것은 맞지만 의견을 읽으십시오. 최종 값은 1129입니다. – Kristian

관련 문제