C언어 포인터, fread/fwrite관련 질문

C언어 포인터, fread/fwrite관련 질문

작성일 2020.12.22댓글 1건
    게시물 수정 , 삭제는 로그인 필요


test와 test2 앞에 &를 제거해도 결과가 같습니다.
책에서는 &를 붙이는데,
함수원형을 보니까, test/test2가 들어갈 자리는 const void * buffer로 되어 있습니다.
제가 생각하기에 test/test2를 써야하는데, 왜 책에서는 &test/&test2를 쓰고,
왜 &를 붙이고 말고에 차이가 없을까요?
있어야 할 것 같은데요.


#c언어 포인터 예제 #c언어 포인터 배열 #c언어 포인터 개념 #c언어 포인터 사용이유 #c언어 포인터 함수 #c언어 포인터 문제 #c언어 포인터 변수 #c언어 포인터 연산 #c언어 포인터 연습문제 #c언어 포인터 출력

profile_image 익명 작성일 -

double test[] = { 1.0, 2.0, 3.0 };

test 의 자료형은 double [3] 입니다. double 이 3 개 묶여 있는 배열을 뜻합니다.

그래서 너무도 당연하게 &test 는 double [3] 가 저장된 메모리의 주소가 됩니다.

즉, { 1.0, 2.0, 3.0 } 이 저장된 메모리의 주소가 되겠죠.

&test + 1 은 test 다음의 double 3 개가 저장된 메모리의 주소가 됩니다.

그런데, 배열은 대부분의 수식에서 첫번째 요소의 주소로 변환됩니다.

즉, test 는 수식에서 &test[0] 으로 변환됩니다. 1.0 이 저장된 메모리의 주소가 되죠.

결국, &test 나 test의 변환값이나 수치적으로는 같습니다.

{ 1.0, 2.0, 3.0 } 이 저장된 메모리의 주소나, 1.0 이 저장되어 있는 주소나 같죠.

write 함수는 첫번째 인자로 전달된 주소의 메모리에 어떤 형이 저장되어 있는 지 알 수 없습니다.

두번째, 세번째 인자를 가지고 상상하는 것이죠. 두번째 인자(크기)가 세번째 인자(개수) 만큼 읽어서

write 하는구나 하고 말이죠.

fwrite(&test, sizeof(test), 1, f); 은 test 의 크기(sizeof(double[3]))를 1번에 write 하는 것입니다.

그래서 &test 로 쓰는 것이 의미적으로 정확한 것이고,

fwrite(test, sizeof(test), 1, f); 라고 해도 &test나 test의 변환값이 수치적으로 같아서,

결과는 같게 나오지만, 의미적으로는 틀린 것입니다.

double 이 저장되어 있는 주소를 전달하면서 double [3] 을 읽어 저장하는 꼴이기 때문에...

첫번째 인자로 test 를 사용하고 싶으면,

fwrite(test, sizeof(test[0]), 3, f); 으로 하는 것이 맞겠죠.

참고로, 대부분의 연산에서 변수는 변수에 저장된 값으로 변환되고,

함수는 함수가 저장된 메모리의 주소로 변환된 후 연산이 됩니다.

배열의 변환도 이러한 과정 중의 하나입니다.

이러한 변환이 일어나지 않는 연산자로는 다음과 같은 것들이 있습니다.

&, sizeof, = 의 왼쪽

C언어 포인터, fread/fwrite관련 질문

... fwrite(&test, sizeof(test), 1, f); fclose(f); fopen_s(&F, "test_final.bin", "rb"); fread(&test2, sizeof(test2), 1, f); printf("%0.2lf %0.2lf %0.2lf", test2[0], test2[1], test2[2]); fclose(F)...

c언어 fread,fwrite 사용예제 질문.

... feof, fread, fwrite 이해하기 쉽게 설명해주세요.... IT관련 진로, 진학, 자격증, 취업, 특기병... 궁금증이나 질문사항 있으시다면 쪽지나 메일...

파일구조론에서 freadfwrite 개념을...

... 함수 앞에 f가 붙으면 file 관련 함수입니다. fread 는 파일에서 메모리로 읽어오고, fwrite 는 메모리의 값을... 질문하신 내용을 보면 파일을 열어서 비디오명을 입력받고...

c언어 포인터 질문

질문1. 왜 마지막 fwrite에는 &표시를 붙이나요? 질문2. R이 구조체인데 왜 R... fread(bb->name, sizeof(bb->name), 1, stdin); 참고로, fread 또한 첫 파라미터 자리가...

fread함수관련 질문입니다.

... 해주는것이고요 freadfwrite나 함수원형은 거의 똑같습니다 int fwrite(char* src, size_t t, size_t t, FILE* stream) 함수의 인자 타입을 보면 어떤...

setvbuf()와 fread() 버퍼관련 질문있...

... 일단 질문의 요지는 이렇습니다. " fread()함수나 fwrite()함수를 사용하면서 이미 버퍼 크기를 설정해 놓았는데 굳이 setvbuf()함수를 이용하여 입력...

fwrite 반환값은?

... 생겨서 질문을 드립니다. fwrite 의 원형과... fread 그리고fwrite 는 성공적으로 읽고 쓴 항목(item)의... 도와주십쇼~ fwrite 의 인수중 리턴값과 관련된 내용이...

c언어 파일입출력 관련 질문

... fwrite(&e, sizeof(e), 1, fp); break; case 2: printf("찾을 이름 입력:\n... while(!feof(fp))//파일이 끝이 아니면 { fread(&e, sizeof(e), 1 ,fp);//한 사람의...