initialize(초기화) 하고 assign(할당)
이 두가지 개념이 잘 이해가 안간다 ..
초기화하다라는게 내가 아는 초기화의미가 아니라
초기 내용을 설정하다 이런의미인걸로 보면
초기에 선언할때 설정하는 뭐? 그런 의미인 것 같은데
할당하다는 또 뭐지..
int yaks[4]
yaks[4] = {5,3,2,3};
이건 할당을 하는거고
int yaks[4] = {5,3,2,3};
이건 초기화를 하는 것 같은데
뭔 차이인지를 모르겠네.. 둘다 yaks[0]에 5, yaks[1]에 3, yaks[2]에 2, yaks[4]에 3이라는 값들을 넣는거 아닌가 ?
일단은 선언할때마다 값을 0이든 뭐든 넣는게 좋은 습관인건알겠는데 ..
ㅅㅂ.. 이해가 안간다 일단 chpter10 공부하고 와도 모르면 구글링을 해봐야하나 머리아프네
할당, 초기화는 똥구멍으로 생각하면 편함
똥구멍을 벌리면 할당이고
그 벌린 구멍에 똥이 가득찬게 초기화임
똥을 못참아서 똥방귀끼는건 오버플로우임
항문에 똥이 가득찬상태에서 후장섹스하는건 해킹임
형님 드립인가요 ?
변수와 배열을 따로 생각하지마
배열은 변수의 집합이지. 변수 열개 선언하는거보다 배열 한번 선언하는게 눈대중으로 봐도 효율적이야. int a, b, c, d, e, f,g , h, i , j 보다 int arr+ 이 효율적이지. arr[0] 은 변수 1개와 동일해. arr[1] 도 변수 한개와 동일해. 변수 10개가 모인게 arr+ 이야. int a=1,2,3,4,5; a 변수에 이렇게 5개의 숫자 들어갈수 있어? 없어. arr[2] 는 변수 한개와 동일하다고 했어. 그렇다면 arr[2]= 1,2,3,4,5 변수 한개에 이렇게 숫자 5개 들어 갈수 있어? 없어. 변수 10개 만들고 한번에 값을 입력하고 싶을때 사용하는게 {}; 문법이야.
넵 그건 이해했어요 .. 변수 = 자료형들의 집합? 이라고 생각하면 될까요 ? 근데 초기화와 할당이 두개가 뭐가 차이인지를 모르겠어요
int a=1, b=2, c=3 배열 각각의 인덱스는 변수 한개와 동일한데 배열은 변수들의 집합이니까 편의를 위해 배열 생성시에 값을 줄수 문법을 지원해주는거야 int arr[2] = {1,2}; 생성후 사용할때는 위에 적은 이유로 컴파일러가 거부하는거야
아 int arr+ ; 해놓고 arr[2] = {1,2}; 가 안된다는건가요 ?
멀어렵게 생각하지? ㅇㅅㅇ 그냥 상자 만들때 내용물도 같이 넣어서 만드는거고 할당은 상자만들어놓고 나중에 넣는거고 ㅇㅅㅇ
근데 책에서 선언할때만 초기화가 가능하다. int yak[5]; yak[5] = {1,2,3,4,5); 이게 안된다고 해서요 이게 되지않나요? 안된다는게 뭔 의미인지를 모르겠어요
const 배우면 이해가 더 빠를거임 ㅇㅅㅇ 어떠한 값할당하고 나중에 그 값을 변경하고싶지않을때 초기화 구문을 쓸수밖에없음 const int value = 3;
아 네 const도 배웠어요, 정확히 기억나진않는데 한번 변수를 넣고 그 변수값이 변경되지 않길 원한다면 const int yak[5] = {1,2,3,4,5}; 이렇게 하라고 하더라고요
int value; <-- 변수를 선언한다 int value = 3; <-- 변수를 선언함과 동시에 초기화한다, 즉 선언할때만 초기화가 가능하다.
할당은 그러면 무슨의미인가요 ?
그리고 yak[5] = {1,2,3,4,5} 는 허용이 안됨 ㅇㅅㅇ yak[5] 는 int값 하나만 받는데 다섯개를 넣을수가없지 배열공부하면 알것
아 !!! 그러면 yak가 5개 변수의 집합인데 이걸 1,2,3,4,5를 일일히 넣어주려면
yak[0] = 1; yak[1] = 2; yak[2] = 3; 이런식으로 일일이 다 넣어줘야한다는말인가요 ?
대신 int yak[5] = {1,2,3,4,5}; 이런식으로 배열을 선언할때는 한번에 다 넣는게 가능한거고??!
ㅇㅇ 따로따로 넣어야지
할당과 초기화는 위에 애들이 설명 잘해놨네 그것 참고해
감사합니다! 혹시 고닉같은거없으신가요? 너무 착하시네요
3을 할당한다 value = 3; 5를 할당한다 value = 5; 7를 할당한다 value = 7 즉 어떠한 상자에 값을 넣는행위를 할당시킨다 혹은 할당한다
그러면 int yak[5] = {1,2,3,4,5} ; 이건 할당하면서 초기화하는건가요 ?
ㅇㅇ 그렇지 5개의 상자를 만듬과 동시에 1,2,3,45로 차례대로 채워넣는다
초기화라는건 말그대로 단 한번밖에 못하는 개념이고 할당이라는건 언제든지 할수있는행위이므로 개념이 다르지 ㅇㅅㅇ
아 ... 이게 선언할때는 yak[4] 이렇게 하면 4개의 방을 만드는데, 선언하고나서 yak[4] 해버리면 4개의 방을 의미하는게아니라 3번째방 (0번부터 시작하니까 3번째가 마지막 방) 만 의미하니까 일일히 다 넣는거밖에 안되는거맞죠 ?
ㅇㅇ int yak[4] -> 방 네개 생성 yak[0] 첫번째 방에 접근한다 yak[1] 두번째 방에 접근한다 yak[4]은 5번재 방이지 방번호가 0부터시작하니깐
아 그러네요 .. int yak[4] 해버리면 yak[4]라는 방은 없는방인거네요 .. 감사합니다 나중에 기프티콘이라도 보내드리고싶은데 고닉같은거 없으신가요 ?
제가 군인이라 지금은 못보내드리네요 ㅠㅠ
업서 ㅇㅅㅇ
형님 공부하러가기전 마지막질문인데요 int yak[4] ; 선언해놓고 yak[4] = 5 라고했을때 yak배열은 yak[5]가 되는건가요 ? 이게 맞다면 int yak[4]; 해놓고 yak[5] = 5 라고했을때 yak[4]는 없을꺼고, yak 0123와 yak4 만있을텐데 어떻게 되는거죠? 답변은 감사합니다!
아니 배열은 한번생성하면 크기 못바꿔 ㅇㅅㅇ 범위 밖으로 접근하면 에러뜸
그럼 yak[4] =5; 하면에러가 나는건가요 ? 웹ide에서 int yak[4] = {1,2,3,4,} ; 하고 yak[4] = 5 한다음 printf("%d", yak[4]) 하니까 5나오던데 이건 왜그러는간굥 ?
몰러 ㅇㅅㅇ 웹ide가 에러를 못잡아주는거겟지 일반적으로는 배열인덱스범위 밖에서의 접근은 절대 하면 안되는행위임 포인터를 알면 내부적으로 어떻게 돌아가는지 알수있는데 yak[4]하면 포인터가 실제로 어떠한 주소를 가르키게되는데 거기에 변수를넣고 읽는행위니까 뭐 그렇겟지 월래는 에러가 정상이고 절대로 하면안되
아하 그럼 이제 포인터 배울차례니까 공부하러갈게요 감사합니다!!!!!!!!