보통 a라는 배열명을 가진 배열에 시작 주소 출력할 때
printf(%x,a);
이런식으로 쓰잖아
근데 씨발 왜 문자 배열은 안그럼?????
printf(%s,a); 이런식으로 쓰면
오류가 나와야하는게 정상 아님?
왜냐면 배열명은 시작번지를 나타내는거지,
그 주소 안에 들어가있는 값을 나타내는게 아니잖아
지금 이거 1시간째 왜이러는지 고민하는중임
누가 제발 좀 알려줘...
printf(%x,a);
이런식으로 쓰잖아
근데 씨발 왜 문자 배열은 안그럼?????
printf(%s,a); 이런식으로 쓰면
오류가 나와야하는게 정상 아님?
왜냐면 배열명은 시작번지를 나타내는거지,
그 주소 안에 들어가있는 값을 나타내는게 아니잖아
지금 이거 1시간째 왜이러는지 고민하는중임
누가 제발 좀 알려줘...
문자열이 메모리에서 어떻게 표현되는지는 알아?
걍 단어 하나하나 주소값에 넣어져있는거 아니냐? 암튼 뭔데??
1. 파라미터는 컴파일 타임에 크기가 정해져 있어야 함. 2. 문자열의 길이가 얼마나 될지 모름. 3. 따라서 문자열 자체를 파라미터로 넘겨주는 건 불가능. 4. 그래서 메모리 어딘가에 연속적으로 존재하는 문자열의 시작 주소를 넘겨주면(주소는 크기가 일정하므로 넘겨줄 수 있음) printf는 그 위치부터 문자를 읽어서 출력하기로 함.
주소를 출력하는게 아니라, 주소 안에 들어있는 값을 출력한다는거에요? 하지만 문자열이 아닌 그냥 int형으로 저장된 상수는 시작주소를 출력하라고 하면 문자 그대로 그 주소의 위치를 출력하잖아요. 왜 문자열은 시작주소 출력을 하면 문자열 안의 문자를 출력하는거고, 상수는 시작주소 출력을 하면 주소를 출력하는거에요?
문자열도 %d로 출력하면 주소값 출력하는데?
상수값도 %s로 출력하면 문자 출력하고
일단 님께서 알려주신 코드먼저 치고올게요. 저 혼자 고민좀 해보고 모르겠으면 또 글씀여
%s 는 \0 이 나올때까지 출력한다니까
주소를 출력하는거랑 주소값을 출력하는거랑은 완전 다르잖아요. &a를 출력하는거랑 a[n]을 출력하는거랑 다른것처럼
int main() { int sex+; for (int i = 0; i < 10; i++) { sex[i] = 48; } printf("%s\n", sex); printf("%d", sex); }
이거 한번 실행 시켜봐
그 문자열을 %s로도 출력해보고 %p로도 출력해봐
배열 그 자체가 문자열이기 때문이다. 자 봐라. 문자열에 "열"자가 있지? 즉 문자의 배열이라는 뜻이다. char이 여러 개 모여서 된 게 문자"열"이라고. 따라서 배열의 한 원소만 지정해서는 부족하고 배열을 통째로 지정해야 하는데 그러려면 시작 주소를 지정하는 게 가장 쉽다