add: quiz and exercises to pointers
This commit is contained in:
96
26-pointers/exercises/01-basics/solution/main.go
Normal file
96
26-pointers/exercises/01-basics/solution/main.go
Normal file
@ -0,0 +1,96 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
type computer struct {
|
||||
brand string
|
||||
}
|
||||
|
||||
func main() {
|
||||
// create a nil pointer with the type of pointer to a computer
|
||||
var null *computer
|
||||
|
||||
// compare the pointer variable to a nil value
|
||||
if null == nil {
|
||||
// , and say it's nil
|
||||
fmt.Println("null computer is nil")
|
||||
}
|
||||
|
||||
// create an apple computer by putting its address to a pointer variable
|
||||
apple := &computer{brand: "apple"}
|
||||
|
||||
// put the apple into a new pointer variable
|
||||
newApple := apple
|
||||
|
||||
// compare the apples: if they are equal
|
||||
if apple == newApple {
|
||||
// say so and print their addresses
|
||||
fmt.Printf("apples are equal : apple: %p newApple: %p\n",
|
||||
apple, newApple)
|
||||
}
|
||||
|
||||
// create a sony computer by putting its address to a new pointer variable
|
||||
sony := &computer{brand: "sony"}
|
||||
|
||||
// compare apple to sony, if they are not equal
|
||||
if apple != sony {
|
||||
// say so and print their addresses
|
||||
fmt.Printf("apple and sony are inequal: apple: %p sony: %p\n",
|
||||
apple, sony)
|
||||
}
|
||||
|
||||
// put apple's value into a new ordinary variable
|
||||
appleVal := *apple
|
||||
|
||||
// print apple pointer variable's address, and the address it points to
|
||||
// and, print the new variable's addresses as well
|
||||
fmt.Printf("apple : %p %p\n", &apple, apple)
|
||||
fmt.Printf("appleVal : %p\n", &appleVal)
|
||||
|
||||
// compare the value that is pointed by the apple and the new variable
|
||||
if *apple == appleVal {
|
||||
// if they are equal say so
|
||||
fmt.Println("apple and appleVal are equal")
|
||||
|
||||
// print the values:
|
||||
// the value that is pointed by the apple and the new variable
|
||||
fmt.Printf("apple : %+v — appleVal: %+v\n",
|
||||
*apple, appleVal)
|
||||
}
|
||||
|
||||
// change sony's brand to hp using the func
|
||||
change(sony, "hp")
|
||||
// print sony's brand
|
||||
fmt.Printf("sony : %s\n", sony.brand)
|
||||
|
||||
// print the returned value
|
||||
fmt.Printf("appleVal : %+v\n", valueOf(apple))
|
||||
|
||||
// and call the func 3 times and print the returned values' addresses
|
||||
fmt.Printf("dell's address : %p\n", newComputer("dell"))
|
||||
fmt.Printf("lenovo's address : %p\n", newComputer("lenovo"))
|
||||
fmt.Printf("acer's address : %p\n", newComputer("acer"))
|
||||
}
|
||||
|
||||
// create a new function: change
|
||||
// the func can change the given computer's brand to another brand
|
||||
func change(c *computer, brand string) {
|
||||
c.brand = brand
|
||||
}
|
||||
|
||||
// write a func that returns the value that is pointed by the given *computer
|
||||
func valueOf(c *computer) computer {
|
||||
return *c
|
||||
}
|
||||
|
||||
// write a new constructor func that returns a pointer to a computer
|
||||
func newComputer(brand string) *computer {
|
||||
return &computer{brand: brand}
|
||||
}
|
Reference in New Issue
Block a user