C 언어 - 배열/구조체 초기화
typedef struct{
    char MerchantID[128]; 
    char MobileToken[36]; 
}Test_Data;
void testStructInit()
{	
	Test_Data struData = {1};
	int i;
	for (i = 0 ; i < sizeof(struData); i ++)
	{
		printf("%02x ", (char)*(((char *)&struData) + i));
	}
	printf("
");
	return;
}
int main(void)
{	
	testStructInit();
	return 0;
}
질문:
함수testStructInit에 대한 정의와 초기화 문장:struData={1};
먼저 결론을 말하다.
TestData struData = {1} 또는 TestData struData = {1}은 첫 번째 요소를 초기화하는 것 외에 이 변수의 모든 다른 요소를 0으로 초기화합니다.
코드 분석:
106:      Test_Data struData = {1};
0040133E C6 85 5C FF FF FF 01 mov         byte ptr [ebp-0A4h],1
00401345 B9 28 00 00 00       mov         ecx,28h
0040134A 33 C0                xor         eax,eax
0040134C 8D BD 5D FF FF FF    lea         edi,[ebp-0A3h]
00401352 F3 AB                rep stos    dword ptr [edi]
00401354 66 AB                stos        word ptr [edi]
00401356 AA                   stos        byte ptr [edi]
mov         byte ptr [ebp-0A4h],1 //      1,        。   C         。
mov         ecx,28h 			//ecx     28h,ecx      (counter),    (REP)     LOOP        。
xor         eax,eax 	// eax      0
lea         edi,[ebp-0A3h] 	// edi    struData     
rep stos    dword ptr [edi] //   eax     edi     ,     ecx  。
                            //       , dword,4   
stos        word ptr [edi] 	// word  , 2   ,eax     edi     
stos        byte ptr [edi] 	// byte  , 1   ,eax     edi     
//      ,      :
//                ,  ,             sizeof(struData)-1
//      A4h-1=A3h   , CPU   dword(4  )        ,
rep stos    dword ptr [edi]	//       4*28h, A0h   。
							//   3   ,              。
mov         byte ptr [ebp-0A4h],1 -> |      |
rep stos    dword ptr [edi]       -> |        (   4    )|
stos        word ptr [edi]        -> |  3  ,      2   (word)|
stos        byte ptr [edi]        -> |    1  ,   byte   |
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로그'메타프로그램 루비 버전 2'3장 읽기동적 방법 Object#send 호출 방법은 약간 메모와 Object#send obj.send(:my_method, 3) Object#send를 사용하면 어떤 방법으로든 호출할 수 있습니다. privete 방법을 호...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.