2024-07-26

시연·2024년 7월 26일

C언어 -point공부해오기

point

  • point변수는 8 byte
    int: 4byte
    char: 1byte

  • 주소값은 처음 시작 값 => int는 4바이트 만약 24로 시작하면 int 값은 27까지

  • int* p =&i; : 그 주소를 집여넣고 주소값에 접근해서 변경

포인터 변수의 타입별 차이

  • #include <stdio.h>

int main(void) {
int *p1 = 4; // 메모리 위치를 물리적으로 정해줌. 포인트변수에 int값(데이터)을 할당은 맞기는 하지만 4를 바로보고 있는 것

char *p2 = 4;

printf("p1 + 1 : %ld\n",
(long)(p1 + 1)); // p1은 주소 , 1칸이 이동한거지만 1칸이 int값이니 4칸만큼 이동함.
printf("p2 + 1 : %ld\n", (long)(p2 + 1));
return 0;
}

  • // 문제 : 원본값을 훼손하는 change 함수를 만들어주세요.

#include <stdio.h>

// 수정가능지역 시작
void change(int num) {
num = 50;

}
// 수정가능지역 끝

int main(void) {
int x = 20;

printf("change 함수 호출하기 전의 x : %d\n", x);

// 수정가능지역 시작
change(&x); // 위에서 int* num의 포인터 변수를 만들어주면 출력은 그 주소값을 써줘야한다!!!

// 수정가능지역 끝

printf("change 함수 호출한 후의 x : %d\n", x);
// 출력 => change 함수 호출한 후의 x : 50

return 0;
}

다중포인트

  • 원본데이터를 추적
  • 매개변수에도 포인터변수를 넣을 수 있다
  • // 문제 : 원본값을 훼손하는 change 함수를 만들어주세요.(2중포인터)

#include <stdio.h>

void change(int num) { // 이중포인터로 바꾸어주기
num =50;
}

int main(void) {
int x = 20;
int* p = &x;

printf("change 함수 호출하기 전의 x : %d\n", x);

change(&p);

printf("change 함수 호출한 후의 x : %d\n", x);
// 출력 => change 함수 호출한 후의 x : 50

return 0;
}

JAVA 6

  • class Main {
    public static void main(String[] args) {
    무기 a무기 = new 칼();
    a무기.공격();
    // 출력 : 칼로 공격합니다.
    무기 b무기 = new 활();
    b무기.공격();
    //활로 공격합니다

    }

    }
    class 칼 extends 무기{
    void 공격() {
    System.out.println("칼로 공격합니다.");
    }
    }
    class 무기{
    void 공격(){}
    }
    class 활 extends 무기{
    void 공격(){
    System.out.println("활로 공격합니다.");
    }
    }

  • // 문제 : 자동차 리모콘이 페라리 객체를 가리키게 한 후 해당 리모콘이 가리키고 있는 객체를 다시 페라리 리모콘으로 가리키게(참조하게) 하는 코드를 작성해주세요.

class Main {
public static void main(String[] args) {
자동차 a페라리 = new 페라리();
a페라리.뚜껑이_열리다();
a페라리.달리다();

    자동차 a람보르기니 = new 람보르기니 ();
    a람보르기니.뚜껑이_열리다();
    a람보르기니.달리다();


}

}
class 자동차 {
void 달리다() {}
void 서다() {}
void 뚜껑이_열리다() {} // 정의하지 않은 애를 언급했을 때 그것은 실행되지 않음.

}
class 페라리 extends 자동차 {
void 뚜껑이열리다() {}
void 달리다(){
System.out.println("페라리가 달린다");
}
}
class 람보르기니 extends 자동차 {
void 뚜껑이
열리다() {}
void 달리다(){
System.out.println("람보르기니가 달린다"); // 달리다를 재정의 해줌.

}

}

  • class Main {
    public static void main(String[] args) {
    사람 a사람 = new 사람();

        a사람.나이 = 20;
        a사람.a왼팔 = new 팔();
    }

    }

class 사람 {
// 클래스안에 변수를 정의 할 수 있다.
int 나이;
팔 a왼팔; //참조형 변수도 타입을 받을 수 있다
}
class 팔 { //자기 자신에 타입을 넣은 것이므로 extends 사용이 필요없다.
}

  • 전체 주석: 드래그하고 컨트롤 시프트

  • 심화문제 3번,4번 해석해보자

생성자 함수

  • 사람클래스를 만들고 홍길동, 홍길순이라는 할당함.

  • 클래스가 객체화 될때. 클래스 명과 동일한 이름의 함수가 자동 실행된다.

  • 생성자 함수에 같은 (class)함수명이 있으면 실행된다. (●'◡'●)

0개의 댓글