728x90
package main

import "fmt"

func main() {

   //a는 int 형 이라 선언
	var a int
	//p는 int형 포인트
	var p *int
	//p에 a 주소 대입, p의 값은 a의 주소를 가르키고 있다
	p = &a
	//a는 3으로 대입
	a=3
	//3
	fmt.Println(a)
	//0xc000100028 메모리의 주소 나옴
	fmt.Println(p)
	//포인터가 가르키는 값 3(주소가 가르키는 값)
	fmt.Println(*p)
    
    }

 

 

 

 

포인터 왜 쓰냐 

원래 a출력했을 때 

x++로 해도 

값만 복사됐지 a와 b는 다른거라서  1추가 안되고 여전히 1이었음

x는 괄호 밖에서 역할 못하고

 

포인터 쓰면

package main

import "fmt"

func main() {

//포인터가 왜 사용되는지 보자`~~~~`
var a int
  a=1
  //포인터형 *x으로 해서 a의 주소값으로 해야함
  Increase(&a)

  fmt.Println(a)
}

func Increase(x *int) {
	//x가 가지고 있는 값은 메모리 주소인데
	//그 메모리가 가르키는 주소의 값은 = 메모리가 가르키는 주소의 (원래)값 + 1
*x=*x+1

//얘는 아까 x++와 같은 거라 볼 수 있쥐, 그때 포인터로 안하면 a에서 값만 복사돼서 x++여도 x는 함수 안이라서 a가 늘어나진 않았어
}

 

 

 

 

 

 

이거 사용해서

 

structure로 만든 거 보기

 

함수는 값이 복사돼서 쓰이기만 하지 

안에 있는 s는 다 다른거임 그래서 결과도 넣은 거 안나오고 

수학,a라고 나옴

package main

import "fmt"


type Student struct {
name string
age int
grade string
class string

}

func (s Student) PrintSungjuk(){

	fmt.Println(s.class,s.grade)
}

func (s Student) InputSungjuk(class string, grade string){
    s.class = class
	s.grade =grade
}


func main(){
	var s Student= Student{name: "t",age:23, class: "수학",grade: "A"}
 s.InputSungjuk("과학","c")
 s.PrintSungjuk();
}

 

 

s를 포인터형으로 받으면 해결됨!!!

*Student로 바꿔주면 됨

package main

import "fmt"


type Student struct {
name string
age int
grade string
class string

}

func (s *Student) PrintSungjuk(){

	fmt.Println(s.class,s.grade)
}

func (s *Student) InputSungjuk(class string, grade string){
    s.class = class
	s.grade =grade
}


func main(){
	var s Student= Student{name: "t",age:23, class: "수학",grade: "A"}
 s.InputSungjuk("과학","c")
 s.PrintSungjuk();
}

결과가 과학,c로 잘 나옴

 

 

 

복사될 때 student 메모리의 주소만 복사 되는거

s는 메모리 주소값을 가지고 있는거

s.class 한거는 

s 메모리 주소값이 가르키고 있는 값의 class를 변경. 

 

 

 

C++에서는 

메모리 주소가 가르키는 값의 뭘 변경하고 싶을 때 

p->grade  = "c" 이런 식으로 씀(-> 포인터 앞에 이 화살표 사용)

 

값value 형태에만 . 점 찍을 수 있음

(값)s.grade

 고랭에서는 화살표랑 점 구분 안해

p.grade = "c"  포인터여도 점

s.grade ="c"  그냥 내부 값이어도 점

 

 

 

 

structure 만들고 그안에 속성넣고

기능도 만들었을 때

 

그 기능이 그 값의 내용을 변경한다 할때는

값의 형태가 아니라 포인터의 형태로 받는다는거!

 

 

 

포인터 형태로 호출하면 메모리 주소만 복사 된다

값 형태로 호출하면, 인자를 값 형태로 받으면 전체 값이 다 복사 된다

 

 

 

 

 

강의 좋구만~~

 

https://youtu.be/nBAKHq12kew

 

728x90

+ Recent posts