char str[]이 전역변수인경우
str, str[0] : 데이터영역에 할당됨, 둘이 같은주소임
char str[]이 지역변수인경우
str, str[0] : 스택영역에할당됨, 둘이 같은주소임
-----------------
즉 str이라는 배열의 변수명이 따로 어디 할당되서 포인터상수니 뭐니 하는건 아닌것
밍고스설명에나온 포인터가 아니라는말도
배열 이름과 포인터는 다르다. 다만 배열 이름이 몇몇 상황에서 포인터로 암시적인 형 변환(implicit type conversion)을 겪을 뿐이다.
이러한 변환을 붕괴(decay)라고 한다.
라고 설명해줬는데 배열이름 != 포인터 인거고 암시적형변환이나 붕괴에관한건 아직 잘은몰라도 함튼
배열이름 != 포인터
1. 블로그설명은 틀림
2. 책설명은 맞긴한데 문맥상으로 오해의 여지가있다고봄
리터럴상수같은것도 메모리에 할당이 되긴하는데 코드영역에 올라가는 이런것들도
메모리 할당이라고 한다면~ 의 수준임.
의미상제대로 보통 메모리에 할당되는 상수의경우는
00FF2108에 할당되어있는 저런 문자열 상수같은경우만 가능
===================
다시 scanf로 돌아가서
scanf는 주소값을 받고 거기에 call by val로 받은값을 쓴다.
scanf("%s", str); // 정석 / 결과 정상. scanf에 던져주는 주소값 = str의 주소값 = str[0]의 주소값 따라서 str[0]에다가 받은값을 써내려가기시작
scanf("%s",&str); // 비정석 / 결과 정상. scanf에 던져주는 주소값 = 위와 같음. 그래서 결과도 같음
다만 전자는 char*의 주소값을 던져준거고 후자는 char (*)[] 의 주소값을 던져준거고
이 케이스에서는 전자던 후자던 sizeof char*index만큼을 넘어가면 문제가 생기는것도 동일하긴하지만
문제가 되는케이스는 char* str2 = str; 이런식일때 &str2로 줘버리면 str2의 크기는 char만큼인데
입력받는 자료가 char보다 클경우에 문제가 생긴다는것.
혹시 내가 잘못이해하거나 적은거나 부족해보이는거있으면 메차쿠차 태클좀
한가지 더.. 그럼 arr이나 str같은 이 '변수이름'은 뭐라고 불러야함? 주소자체는 arr[0]이라는 이 배열 처음의 주소와 같은곳을 가르킨다? 아니 존재자체가 같은곳에 존재한다고해야하나? 이런존재를뭐라함? 가르키는 포인터가 아니라고했자늠. 몇몇경우를제외하고 포인터로 암시적 형변환이 일어날뿐인것이니. 실제적으로 포인터 는 아닌거지. 뭐라고 호칭해야함?
흐린바다횽 프겔러 답지 않게 이런거 고민하네. 난 초보라서 아직 잘 모르지만, 모든 답은 컴파일러에 있는거 아니냐? 저번에 헬로우횽이 컴파일러로 설명해줬는데 완벽하진 않았음. 그리고 저런걸 하나로 묶어서 c, 컴파일러, 마이크로 프로세서까지 통합해서 설명하는책이 없더라구. 난 컴퓨터의 복잡계가 알고 싶었을 뿐인데;; 오히려 티나상이 그딴거 없다고 날 비웃기나 하고 말야 ㅋㅋㅋ
마이크로 프로세서는 시발 왜 묶어서 설명하는데 씨발 진짜 ㅋㅋㅋㅋㅋ
혹시 부산 사셈? 너무슦까서 먹을려고 하시는거같은데
컴퓨터의 복잡계를 알고싶으면 제발 C가 아니라 컴퓨터구조론같은걸 배워