이 사이트에서 "MIME 유형"퍼즐을 풀려고 노력했습니다 : https://www.codingame.com/games/puzzles/
다음 사이트에서이 퍼즐에 대한 답을 찾았습니다. http://ethiery.vvv.enseirb-matmeca.fr/CGsolo/mime-type.html
p = d.elmts+i;
가 위 링크 의 (49 행)이 무엇을하는지 설명 할 수 있습니까 ?p = d.elmts+i;
. (stackoverflow에서 처음입니다. 이것이 코드 조각으로 나타날지 잘 모르겠습니다. 그렇지 않으면 사과드립니다)암호
d.elmts[i].ext = malloc(11*sizeof(char));
d.elmts[i].mime = malloc(51*sizeof(char));
scanf("%s %s\n",d.elmts[i].ext, d.elmts[i].mime);
p는 구조체에 대한 포인터입니다. 이것은 p가 메모리에있는 구조체의 시작 주소를 '보유'한다는 것을 의미합니다. 따라서 p = d.elmts + i는 현재 구조체에 대해 메모리의 시작 주소를 나타냅니다 (i는 주소를 나타냅니다). 오프셋). 이 예제에서 메모리는 'dictSize'구조 (즉, 구조 수)에 할당되었습니다. 구조에 대한 메모리는 연속적으로 (서로 나란히) 할당되므로 예약 된 메모리 (iedelemts)의 시작 주소와 일부 오프셋 (예 : i)을 사용하여 쉽게 액세스 할 수 있습니다.
구조체에 대한 포인터가 선언되면 화살표 표기법을 사용할 때 포인터를 통해서만 기본 구조체 멤버에 액세스 할 수 있습니다. 구조가 선언 된 경우 (구조에 대한 포인터가 아님) 점 표기법을 사용하여 기본 구조 멤버에 액세스 할 수 있습니다.
C에서 '[]'표기법을 사용하면 실제 값 (할당 된 메모리에)을 할당하려는 것으로 해석 될 수 있습니다. 반면에 라인 50과 51에 사용 된 포인터 표기법은 할당 메모리를 활성화하는 것입니다. 즉 시작을 가리 킵니다. 할당되는 메모리의 주소-각 멤버가 가정 할 수있는 가능한 값을 유지하기 위해, 즉 아직이 메모리에 값을 넣지 않은 경우 먼저 메모리를 생성 / 할당해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다