陈cp 2020-07-07 14:34 采纳率: 0%
浏览 164

golang为何会输出了一个地址码,求救

#小白一枚,问题描述:定义了一个方法去输出,结果不是理想的输出

图片说明

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var s str
    s.Push(4)
    s.Push(4)
    s.Push(4)
    s.Push(4)
    s.Push(4)
    s.Push(4)
    s.Push(4)
    s.Push(4)
    s.Push(4)
    s.Push(4)
    s.Pop()
    s.Push(1)
    fmt.Println(s.Str)
}

type str struct {
    i int
    d [10]int
}

func (s *str) Push(k int) {
    s.d[s.i] = k
    s.i++
}

func (s *str) Pop() int {
    s.i--
    return s.d[s.i]
}

func (s str) Str() string {
    var result string
    for i := 0; i <= s.i; i++ {
        result = result + "[" + strconv.Itoa(s.i) + ":" + strconv.Itoa(s.d[i]) + "]"
    }
    return result
}

  • 写回答

1条回答 默认 最新

  • random_w 2020-07-08 11:13
    关注

    两个问题:
    1. 你在main函数中调用了Str函数,因为后面没有加括号,所以并不会执行,s.Str指向一个内存地址:

    // 方法一: 将s.Str赋值给一个变量,然后执行该变量,就相当于执行了s.Str()
        S := s.Str
        fmt.Println(S())
        // 方法二: 给s.Str后面加上括号
        fmt.Println(s.Str())
    
    1. Str()方法的for循环写错了,切片是从0索引开始的,所以for循环的范围应该是从0~i-1:
        for i := 0; i < s.i; i++ {
            result = result + "[" + strconv.Itoa(s.i) + ":" + strconv.Itoa(s.d[i]) + "]"
        }
    
    评论

报告相同问题?

悬赏问题

  • ¥20 蓝牙耳机怎么查看日志
  • ¥15 R语言 拟时序分析降维图如何减少分支
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统