1. %d : 10진수로 출력 정수형 2. %f : 실수형 3. %e : 지수형 4. %o : 8진수로 출력 5. %x : 16진수로 출력 6. %u : 부호없는 10진수로 출력 7. %g : 실수형으로 자동 출력 8. %p : 포인터의 주소를 출력 9. %c : 하나의 문자로 출력 문자형 10. %s : 문자열을 출력
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();
}