Go中的指针与函数接收器

Go中使用*号表示指针,但是没有指针算数,不能对其进行加减。同时内存管理都由Go来负责,不需要拖动释放内存。

Go中的函数接收者,可以为值类型,也可以是引用类型。

看代码:

package main

import (

"fmt"

)

type Rect struct {

X, Y,Area,Length float64

}

func (r *Rect) CalArea() {

r.Area = r.X*r.Y

}

func (r Rect) CalLength() {

r.Length = 2*(r.X+r.Y)

}

func main() {

r1 := Rect{3, 4, 0, 0}

r1.CalArea()

r1.CalLength()

fmt.Println(r1.Area)

fmt.Println(r1.Length)

r2 := &Rect{3, 4, 0, 0}

r2.CalArea()

r2.CalLength()

fmt.Println(r2.Area)

fmt.Println(r2.Length)

}

运行结果:

12

0

12

0

可以直接在这里查看代码运行情况:

http://play.golang.org/p/ZleGPoyuEp

从上面的代码中可以看出:

1、Go中函数接收器可以理解为函数的一个参数,如果传的是引用,就可以改变调用函数中的值。

2、除了接收器中需要使用*来表明指针,在调用函数和被调用函数中*号和&符号均不是必须的,Go会在调用函数和使用参数时时根据接收器做转换。

时间: 2024-10-21 04:52:29

Go中的指针与函数接收器的相关文章

php中使用指针进行函数操作

数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. current():取得目前指针位置的内容资料.key():读取目前指针所指向资料的索引值(键值).next():将数组中的内部指针移动到下一个单元.prev():将数组的内部指针倒回一位.end():将数组的内部指针指向最后一个元素.reset():将目前指针无条件移至第一个索引位置. 这些函数的参

c++中使用指针调用函数和使用指针调用类对象的()重载函数

使用函数指针时,指针可以像函数名一样,直接加括号和参数列表调用:也可先解引用再调用 1 1 //include directories... 2 2 using namespace std; 3 3 void testFun() 4 4 { 5 5 cout<<"this is a test"<<endl; 6 6 } 7 7 int main(int argc,char**argv) 8 8 { 9 9 auto *pFun=testFun; 10 10 pF

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

【示例】C语言中利用数组存放函数指针

C语言中利用数组存放函数指针,增加函数使用的灵活性.使用时只需提供数组索引,即可调用不同函数. 预备知识: 1.指向函数的指针 一个函数在编译时被分配一个入口地址,这个地址就被称为函数的指针. 例如: int max(int,int); // 声明函数,比较两数大小 int (*p)(); //声明指向函数的指针变量 p=max; //将函数max的入口地址赋给指针变量p int c=(*p)(a,b); //调用函数 2.函数指针作为函数参数 该例子中每次给process函数不同实参(函数名)

【通过操作指针,与指针做函数參数&amp;#39;实现字串在主串中出现的次数,然后将出现的部分依照要求进行替换 】

#include<stdio.h> #include<stdlib.h> int strTime(const char *str1, const char *str2, int *time) { int count = 0; char *p1 = str1; char *p2 = str2; //p1是第一次出现的位置 p1 = strstr(p1, p2); //注意这里不要写成*p1!=NULL 由于p1 是null的地址一旦读取*p1 会出错的!!!!不能读取操作系统的数据

通过操作指针,与指针做函数参数&#39;实现字串在主串中出现的次数,然后将出现的部分按照要求进行替换

#include<stdio.h> #include<stdlib.h> int strTime(const char *str1, const char *str2, int *time) { int count = 0; char *p1 = str1; char *p2 = str2; //p1是第一次出现的位置 p1 = strstr(p1, p2); //注意这里不要写成*p1!=NULL 因为p1 是null的地址一旦读取*p1 会出错的!!!!不能读取操作系统的数据

向函数中传递指针和传递指针的引用的区别

如果是传递指针,那么会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针:但 是对于传递指针应用,如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象,这样就会造成内存泄漏,因为原来指针指向的地方已经不能再 引用了,即使没有将传递进来的指针指向新的对象,而是在函数结束的时候释放了指针,那么在函数外部就不能再使用原有的指针了,因为原来的内存已经被释放了 看个例子: #includ

C++中的函数指针和函数对象总结

篇一.函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址.函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数.函数指针的声明方法:数据类型标志符 (指针变量名) (形参列表):一般函数的声明为: int func ( int x );而一个函数指针的声明方法为:int (*func) (int x);前面的那个(*func)中括号是必要的,这会告诉编译器我们声明的是函数指针而不是声明一个具有返回型为指针的函

C++中的指针、数组指针与指针数组、函数指针与指针函数

C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从初学者的角度,深入浅出地详解什么是指针.如何使用指针.如何定义指针.如何定义数组指针和函数指针,并给出对应的实例演示:接着,区别了数组指针与指针数组.函数指针与指针函数:最后,对最常混淆的引用传递.值传递和指针传递做了区处. C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力.指针可以用于数组.或作为函数的参数,用来访问内存和对内存的操作,指针的使用使得C++很高效,但是指针也非常危险,使用不当会带来比较