새로 알게된 점 10가지 1. 함수 내에서 함수 외부 변수의 값을 변경하기 위해 포인터가 필요하다. 2. 포인터변수의 크기는 포인터가 가리키는 대상의 자료형이 무엇이든 상관없이 8바이트다. 3. 2차원 배열이여도 메모리는 1차원 구조이므로 1차원상의 형태로 존재한다. 4. 2차원 배열에서 int a[][3]과 같이 행의 수는 생략 가능한데 컴파일러가 열의 수에 맞게 초깃 값을 끊어 행의 수를 결정할 수 있지만, 열의 개수는 한 행의 크기를 결정하기 때문에 생략할 수 없다. 5. 2차원 배열을 포함한 N차원 배열은 1차원 배열이다. 6. N차원 배열의 자료형은 (N-1)차원 배열이다. 7. 3차원 배열은 직육면체 형태의 배열로 int a1[2][3][4] 의경우 2*3*4*sizeof(int) 로 크기를 구할 수 있다. 8. 2차원 배열의 초기화 리스트는 1차원 배열의 초기화 리스트{}가 다수 모여있는 형태이며 3차원 배열의 초기화 리스트는 다수의 2차원 배열 초기화 리스트로 이뤄져 있는 형태다. 차원이 높아질수록 그 이전 차원의 리스트를 원소로 쓴다. 9. 함수의 인자에 포인터 배열을 받는 경우 배열은 주소에 의한 호출이라 배열의 첫 번째 원소의 주소가 전달되고 포인터 배열의 경우 첫 번째 원소가 포인터이므로 주소는 이중포인터여야 한다. 10. 배열의 차원 수 만큼 인덱스가 필요하므로 접근하기 위해 반복문이 하나씩 더 필요하다.
for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { *(*(a3 + i) + j) = *(*(a1 + i) + j) + *(*(a2 + i) + j); printf("%d ", *(*(a3 + i) + j)); } printf("\n"); } 위코드의 동작을 상세히 설명할것 a1과 a2의 합을 구하여 a3에 저장하기 위해 2차원 배열이기 때문에 이중반복문을 사용해서 행과 열을 i와 j로 접근했다. a1+i는 2차원 배열명a1의 i번째 행의 시작주소를 뜻함. => i*sizeof(int[2])만큼 이동하는 것과 같다 역참조하면 *(a1+i)== a1[i]가 되는데 i번쨰 행의 첫번째 원소 주소(&a[i][0])을 가리키는 상태 *(a1+i)에+j를 하면 i번째 행에서 j번째 열 요소 주소로 이동하게 된다는 뜻 => j*sizeof(int)만큼 이동하는 것과 같다. 그 주소를 *(*(a1+i)+j)로 역참조하여 그 주소에 저장된 정수 값에 접근할수 있게 된다. 이렇게 하면 배열 a1[i][j]와 같은 결과를 출력할 수 있다.
배열명과 포인터의 관계를 활용해 *(*(a+i)+j)형식으로 값을 더하여 a3에 저장하고 출력했다.
이중포인터를 사용하는 예를 2가지 이상 설명하라 1. 함수의 인자에 포인터배열을 받는 경우 2. 다른 함수에서 선언된 포인터의 값을 변경하는 경우
첫댓글다시 공부하면서 새롭게 알게된 사실을 나열하시오. 10개이상 없으면 공부를 제대로 안한것임 for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { *(*(a3 + i) + j) = *(*(a1 + i) + j) + *(*(a2 + i) + j);
printf("%d ", *(*(a3 + i) + j)); } printf("\n"); } 처리와 출력이 반복문안에 섞여 있음 -> 서로다른 기능을 섞어서 코딩하지말것 절대금지해야할 사항임 입력->처리->출력 기능을 분리하여 작성, 함수만들때도 동일한 규칙적용 위코드의 동작을 상세히 설명할것 위코드는 배열포인터의 의미를 알아야 설명이 가능한데 배우지도 않은것을 쓰지말고 단일 포인터만을 이용한 식으로 변경할것, 대충하지 말고 모르는것은 절대 쓰지 말것
첫댓글 다시 공부하면서 새롭게 알게된 사실을 나열하시오. 10개이상 없으면 공부를 제대로 안한것임
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
*(*(a3 + i) + j) = *(*(a1 + i) + j) + *(*(a2 + i) + j);
printf("%d ", *(*(a3 + i) + j));
}
printf("\n");
}
처리와 출력이 반복문안에 섞여 있음 -> 서로다른 기능을 섞어서 코딩하지말것 절대금지해야할 사항임
입력->처리->출력 기능을 분리하여 작성, 함수만들때도 동일한 규칙적용
위코드의 동작을 상세히 설명할것
위코드는 배열포인터의 의미를 알아야 설명이 가능한데 배우지도 않은것을 쓰지말고 단일 포인터만을 이용한 식으로 변경할것, 대충하지 말고 모르는것은 절대 쓰지 말것
포인트의 포인터 -> 용어도 제대로 모르는 xx
이중포인터를 사용하는 예를 2가지 이상 설명하라