세가좋어
추천 0
조회 295
날짜 2024.04.12
|
공돌이인생
추천 0
조회 105
날짜 2024.03.29
|
루리웹-1970043849
추천 0
조회 208
날짜 2023.12.18
|
질풍비장의패
추천 1
조회 589
날짜 2022.11.30
|
루리웹-3648796984
추천 0
조회 781
날짜 2022.11.23
|
루리웹-8641268934
추천 2
조회 702
날짜 2022.08.07
|
루리웹-4247021526
추천 2
조회 747
날짜 2022.07.25
|
루리웹-4746138650
추천 0
조회 680
날짜 2022.06.01
|
키라 요시카게
추천 1
조회 738
날짜 2022.05.24
|
우너무너
추천 0
조회 663
날짜 2022.05.14
|
키라 요시카게
추천 0
조회 652
날짜 2022.04.03
|
와이플
추천 0
조회 652
날짜 2022.01.14
|
와이플
추천 0
조회 677
날짜 2022.01.13
|
와이플
추천 1
조회 823
날짜 2022.01.13
|
인민배우 심영
추천 0
조회 879
날짜 2022.01.09
|
인민배우 심영
추천 0
조회 729
날짜 2022.01.08
|
오잇스
추천 0
조회 647
날짜 2022.01.05
|
인민배우 심영
추천 0
조회 541
날짜 2022.01.02
|
인민배우 심영
추천 0
조회 665
날짜 2021.12.31
|
인민배우 심영
추천 0
조회 1034
날짜 2021.12.30
|
인민배우 심영
추천 1
조회 655
날짜 2021.12.27
|
salvare545
추천 0
조회 613
날짜 2021.12.27
|
_
식봉이는 식봉해
추천 4
조회 1175
날짜 2021.12.27
|
인민배우 심영
추천 0
조회 702
날짜 2021.12.25
|
인민배우 심영
추천 1
조회 814
날짜 2021.12.24
|
인민배우 심영
추천 0
조회 919
날짜 2021.12.16
|
V1046R-MAHORO
추천 1
조회 510
날짜 2021.12.14
|
인민배우 심영
추천 0
조회 715
날짜 2021.12.10
|
p[i]가 *(P+i)랑 동치일걸요? 아닌가?
예. 그런데. printf로 출력할때 (p+i)는 *를 붙이는데 왜 p[i]는 *p[i]라고 안 쓰는지 오히려 scanf로 값을 받을 때는 &p[i]로 배열에서 값을 받는 것 같이 쓰는지.. 이게 흰색과 백색처럼 표현만 다른 것인지..아니면 무언가 깊은 의미의 차이가 있는 것인지... 책도 마지막 장 밖에 안 남았는데...내가 이러려고 시작했나 자괴감 들고 괴롭네요 ㅎㅎ
C언어 건들인지는 너무 오래되서 포인터 정확하게 기억 안나는데 나름 기억나는데로 설명이 쉽도록 써볼게요. 배열의 특이한 설정(?)과 포인터가 섞여서 헤깔리실 수 있어요. 1. 배열명은 해당 배열의 [시작 주소값]을 의미한다. 2. 배열명 + i 를 하면 배열 형태의 [크기값이 자동 적용되서 계산된다]. (char 형이면 i가 1씩 증가, int 형이면 i가 4씩 증가 이런식) 제 기억으로는 *는 값을 가져올 때 쓰는거고 &는 주소를 가져올 때 쓰는거로 기억합니다. 예를 들어 p[i]에 있는 "값이(value)" 1000이라 할 때, *p[i]를 쓰면 "메모리 주소 1000에 있는 값"을 가져와서 배열과 관련없는 쓰레기값이 나와서 이렇게 쓰면 안되는거고, &p[i]로 쓰는 이유는 p[i]는 이미 배열 특성상 주소가 자동으로 적용되어 해당 메모리에 접근한 값이잖아요? 그럼 거기 값을 가지고 있는 주소를(&) 가져 와야 해당 값이 입력되어 있는곳에 데이터를 입력 가능하겠죠? 반대의 경우를 보자면 &p[i] 대신, 주소만 쓰여있는 (p+i) 이렇게 써도 작동될거에요. scanf("%d", p+i); 이런식으로요. 즉, 배열은 특이하게 배열명이 배열의 시작 주소값을 의미하고 있어서 이로 인하여 (p+i)는 주소값을 의미하므로, &p[i]와 같다. { (p + i) == &p[i] } (p+i)는 주소값이기에, 해당 데이터에 접근하려면 *를 붙여서 *(p+i) 이렇게 접근해야한다. 고로 *(p+i)는 p[i]와 같다. { *(p+i) == p[i] } 잘못 기억하고 있는것일 수 있...진 않겠죠 ㅠㅠ? 나름 C언어 재미있어서 옛날에 한참 파고들었는데 잘못 기억하고 있는것이라면 죄송하면서 제가 너무 슬플거 같네요. 아무튼 이미 이해를 완료하셨을 수 도있지만 제 기억이 맞다는 하에 나름 최대한 이해하기 쉽게 적어봤습니다. 조금이라도 도움이 되시길 바래요. 이런 개념이 잘 잡혀있으면 이중이든 삼중이든 다 응용이라 별거 없으실겁니다.
너무 오랜만에 C언어 공부하시는 분을 봐서 흥분해서 글을 길게 썻는데 혹시라도 제가 틀렸다면 말씀해주세요... 쪽팔림을 감수하고 반성하면서 나중에 다시 기회잡아 재공부 하겠습니다 ㅠㅠ
답변 감사드립니다. 공부하다 보니 용어가 너무 혼동되어서 포인터는 포인터인데 배열은 [정수 포인터]라고 표현하기도 하고......union을 보니 예전 엔지니어 분들은 정말 메모리를 아껴(?)쓰려고 고생 많았겠구나...포인터도 그런 노력에서 나온게 아닐까...짐작만 하고 있습니다. 장문의 답변 감사드립니다.