본문 바로가기

반응형

배열

(4)
배열 참조와 2차원 배열의 선언 배열 참조 C에서 배열의 이름이 그 배열의 포인터를 가르키는 것과 같이 Java에는 배열의 이름이 참조값을 가진다. 그러므로 다음과 같이 사용하면 두개의 변수로 하나의 배열을 다룰수 있다. int[] num = {1,2,3,4,5}; int[] num_1 = num; int[] num_2 = num_1; 위의 세 변수 num, num_1, num_2는 모두 같은 참조값을 가지고 있기 때문에 하나의 배열이라고 볼수 있다. 만약 하나의 변수이름으로 값을 수정하게 되면 3개의 값이 다 바뀌는것 같을 것이다. num_2[0] = 9; for(i=0;i
배열 선언, 복사 자바에서의 배열 선언은 C와는 조금 다르다. C에서는 int num[10]; int num2[]={1,2,3}; 이런식으로 하였다면 자바는 int[] num = new int[10]; int[] num2 = new int[]{1,2,3}; int[] num3 = {1,2,3}; 이렇게 3가지 방법이 있다. 2,3 번째는 초기화를 같이 해주는 것이다. 자바와 C의 배열의 다른점은 자바에서는 배열을 만들고 메모리를 할당해 줘야 한다는건데 int, float등 기본 데이터형은 자동으로 메모리가 할당되지만 객체인 경우는 그렇지 않다. 그래서 직접 할당을 해줘야 한다. 안그러면 NULL값이 있게 된다. Person[] yoon = new Peson[10]; 이렇게 한다고 배열에 메모리가 할당되지 않는다. 값을 출..
[C] 함수와 배열 그리고 포인터 - 1부 배열을 사용하다가 함수에 넣을때가 있다. 이부분에서 부터 문제가 생긴다. 도대체 어쩌란 말인가~~~ int ABC = {1,2,3}; printf("sum : %d\n",sum(ABC)); 이게 원하는 코드이다. 함수부분을 보면 다음과 같이 사용하면 된다. int sum(int data[]) 또는 int sum(int *data) 이렇게 하면 된다. 물론 차이는 있다. data[] 이렇게 쓰면 값복사를 하는것이다. 함수안에서 data라는 배열이 새로 생기는 것이다. *data 포인터로 사용하면 배열의 주소만 넘겨 받는다. 그러므로 함수안에서 배열의 값을 변경할수 있다. 여기까지는 간단하게 1차원 배열을 넘기는 방법을 설명한거고 2차원 배열을 넘기는 방법은 조금더 복잡하다. int sum(int dataA..
배열 선언 오늘 처음으로 자바로 뭔가를 만들어 봤음;; 만들다가 조금 힘들었던 부분중 하나가 배열 ㅋㅋ int[] a = new int[10]; a라는 이름으로 크기가 10인 배열을 선언하는 문장이다. 다른 타입도 똑같이 해주면 된다. 이건 금방 찾아서 했는데... 문제는 객체 배열이었다.. 객체도 위와 같은 방법으로 student[] std = new student[10]; 이렇게 하면 컴파일시 아무 문제도 없다. 하지만... 사용할때 std[1].name = "ABC"; 이렇게 할경우에도 컴파일시 아무 문제가 없다. 실행하면... 오류가 뜬다.. NULL 어쩌고 저쩌고 하는건데... 이것 때문에 엄청 헤맸다;; 결론은 std에 student 공간만 10개 만들었지.. 메모리(?)가 할당안된거 같다 해결방법은 사..

반응형