1.指针做函数参数 示例: package main //必须有个main包 import "fmt" func swap(p1, p2 *int) { *p1, *p2 = *p2, *p1 } func main() { a, b := 10, 20 //通过一个函数交换a和b的内容 swap(&a, &b) //地址传递 fmt.Printf("main: a = %d, b = %d\n", a, b) } 执行结果: main: a = 2…
1.指针做函数参数 示例: package main //必须有个main包 import "fmt" func swap(a, b int) { a, b = b, a fmt.Printf("swap: a = %d, b = %d\n", a, b) } func main() { a, b := 10, 20 //通过一个函数交换a和b的内容 swap(a, b) //变量本身传递,值传递(站在变量角度) fmt.Printf("main: a =…
1.切片做函数参数 (备注:用了冒泡排序) 示例: package main //必须有个main包 import "fmt" import "math/rand" import "time" func InitData(s []int) { //设置种子 rand.Seed(time.Now().UnixNano()) for i := 0; i < len(s); i++ { s[i] = rand.Intn(100) //100以内的…
1.数组做函数参数是值拷贝 示例: package main //必须有个main包 import "fmt" //数组做函数参数,它是值传递 //实参数组的每个元素给形参数组拷贝一份 //形参的数组是实参数组的复制品 func modify(a [5]int) { a[0] = 666 fmt.Println("modify a = ", a) } func main() { a := [5]int{1, 2, 3, 4, 5} //初始化 modify(a) /…
1.数组指针做函数参数 示例: package main //必须有个main包 import "fmt" //p指向实现数组a,它是指向数组,它是数组指针 //*p代表指针所指向的内存,就是实参a func modify(p *[5]int) { (*p)[0] = 666 fmt.Println("modify *a = ", *p) } func main() { a := [5]int{1, 2, 3, 4, 5} //初始化 modify(&a)…
课堂笔记 课程回顾         多态 virtual关键字 纯虚函数 virtual func() = 0;         提前布局vptr指针 面向接口编程 延迟绑定 多态的析构函数的虚函数.         多继承的二义性 .         重载 重写 重定义.         实现多态的理论基础:函数指针做函数参数.         vptr指针与虚函数表.         构造函数不应为虚函数 多态会降低程序的执行速度.不建议所有的函数都是虚函数.         多态时的指针步…
结构体指针作为函数参数:结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针.如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率.所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速. #include<stdio.h> struct stu{ char *name; int score; } stus[]={ {}, {} }; void averge(struct…
package main import "fmt" //p指向实现数组a,它是指向数组,它是数组指针//*p指向指针指向的内存,就是实参a func modify1(p *[]int) { (*p)[] = fmt.Println("modify *p = ", *p) } func main() { a := [], , , , } modify1(&a) //这里进行的是地址传递 fmt.Println("main &a= "…
指针是存放变量的地址,那为什么要区分类型?不能所有类型的变量都用一个类型吗?下面用一个例子来说明这个问题. #include<stdio.h> int main() { int a=0x1234; int *p=&a; char *c=&a; printf("p指向的变量a的地址=%p\n",p);//打印指针p指向的变量的16进制的地址 printf("c指向的变量a的地址=%p\n",c);//打印指针c指向的变量的16进制的地址 p…
# include <stdio.h> # include <stdlib.h> # include <string.h> # include <malloc.h> //创建一个结构体 typedef struct programmer { int salary; int experience; ]; } Programmer; void OneyearLater(Programmer *); int main () { Programmer p = {,…
指针: 指针乃C.C++的灵魂之所在,所以有必要好好的复习复习.什么是指针?一句话来概括:“指针是一个变量,它的值是一个地址.”,其中指针变量的声明有如下三种形式: 其中第一种是被推荐的写法. 其中还需要注意:在声明指针时如果未赋值,则是一个野指针[也就是有可能指向了一个不能被使用的地址从而造成程序的错误],所以在声明时一定要赋值,如下: 那如果想取变量的地址则可以用“&”符,如下: 那如果想获取指针指向变量地址的值则需要用“*”解引用的操作,如下: 下面来看一下p指针占用了几个字节: 需要注意…
#include<stdio.h> #include<stdlib.h> #include<string.h> int Funcadd(int a, int b) { return a + b; } int Funcplus(int a, int b) { return a - b; } int Funcmul(int a, int b) { return a * b; } int Funcdiv(int a, int b) { return a / b; } type…
1.结构体做函数参数值传递 示例: package main //必须有个main包 import "fmt" //定义一个结构体类型 type Student struct { id int name string sex byte //字符类型 age int addr string } func test01(s Student) { s.id = 666 fmt.Println("test01: ", s) } func main() { s := Stud…
//数组做函数参数退化为指针的技术推演 #include<stdio.h> #include<stdlib.h> #include<string.h> //一维数组做函数参数退化为指针的技术推演 ]); //计算机中,数组都是线性存储,二维数组元素也是一个个的排列的 //例如: 1,2,3,4,5,6,7,8,9 像这组数据 我们可以认为是一维数组 int a[9]={1,2,3,4,5,6,7,8,9}; //也可以认为是二维数组 int b[3][3]={1,2,3…
1.map赋值 示例: package main //必须有个main包 import "fmt" func main() { m1 := map[int]string{1: "mike", 2: "yoyo"} //赋值,如果已经存在的key值,修改内容 fmt.Println("m1 = ", m1) m1[1] = "c++" m1[3] = "go" //追加,map底层自动扩容…
3205: 数组做函数参数--数组元素求和1--C语言 时间限制: 1 Sec  内存限制: 128 MB提交: 178  解决: 139[提交][状态][讨论版][命题人:smallgyy] 题目描述 定义一个函数来完成对参数数组中元素的排序工作,函数声明如下: int sum(int array[ ][4]);//该函数完成对array数组中的所有元素求和排序工作 在以下程序的基础上,完成对sum函数的定义,提交时,只提交sum函数的定义即可. #include <stdio.h > in…
3204: 数组做函数参数--排序函数2--C语言 时间限制: 1 Sec  内存限制: 128 MB提交: 211  解决: 143[提交][状态][讨论版][命题人:smallgyy] 题目描述 定义一个函数来完成对参数数组中元素的排序工作,函数声明如下: void sort(int array[ ],int n);//该函数完成对array数组的前n个元素的排序工作 在以下程序的基础上,完成对sort函数的定义,提交时,只提交sort函数的定义即可. #include <stdio.h >…
3203: 数组做函数参数----排序函数--C语言版 时间限制: 1 Sec  内存限制: 128 MB提交: 253  解决: 151[提交][状态][讨论版][命题人:smallgyy] 题目描述 定义一个函数来完成对参数数组中元素的排序工作,函数声明如下: void sort(int array[ ]);//该函数完成对array数组的排序工作 在以下程序的基础上,完成对sort函数的定义,提交时,只提交sort函数的定义即可. #include <stdio.h> void sort…
结构体做函数参数,在C语言中属于常见现象,此时为了内存考虑,不传递结构体,而是传递结构体的地址 结构体定义 struct Man { char name[64]; int age; }; 结构体可以与typedef结合使用 typedef struct _Man { char name[64]; int age; }Man; 另外,可以直接定义结构体变量 typedef struct _Man { char name[64]; int age; }Man1,Man2; 还可以采用匿名结构体变量…
引用,简单粗暴的解释叫做别名,简单粗暴的例子就是,我是熊叫大雄,但是很多时候别人不叫我熊叫大雄,会叫我大雄,粤语地区朋友爱叫我阿雄,有人叫我雄,所以,熊叫大雄这个变量的值是我,雄.大雄.阿雄是熊叫大雄的别名,通过别名叫到的值还是我,晕了没? 这一篇主要讲引用做函数参数,引用还有其它内容,不过我觉得做函数参数比较常用且好理解一点, 1.创建引用 引用的创建形式有点类似指针,但是又有不同,一般这样创建引用: int dNum1 = 1; const int dNum2 = 1; int &dNum1…
数组做函数参数,会退化成为一个指针变量.因此在进行数组参数传递的同时,需要传递一个数组长度的参数变量. 数组长度可以通过sizeof(arr)/siezof(arr[0])来得到.关于这个sizeof操作符,简单的理解就是求得指针指向的内存块的大小. 当数组作为实参进行传递的时候,被调用函数中的形参的数据类型和实参所传递过来的数据类型是不一样. 也就是说,写在形参位置上的数组,表面上是数组,但是编译器会将它当作是一个指针,只会分配4个字节的内存. 形参写在括号内,和写在函数中第一行是等价的,只是…
//数组做函数参数不传数组个数的遍历方法 #include<stdio.h> #include<stdlib.h> #include<string.h> void PrintfAK(char **pin){ ; //关键点:pin[i]!=NULL为终止条件 ; pin[i]!=NULL; i++) { printf("%s\n", pin[i]); } } void main(){ //赋值数组最后一个元素是0 //经过实际检测 NULL,0,'\…
Go语言基础之指针 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. Go语言中的指针 任何程序数据载入内存后,在内存都有他们的地址,这就是指针.而为了保存一个数据在内存中的地址,我们就需要指针变量. 比如,"永远不要高估自己"这句话是我的座右铭,我想把它写入程序中,程序一启动这句话是要加载到内存(假设内存地址0x123456),我在程序中把这段话赋值给变量A,把内存地址赋值给变量B.…
在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁. 像数组.字符串.动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合. 有的时候,对于整数.小数.字符等基本类型数据的操作也必须要借助指针,一个典型的例子就是交换两个变量的值. 有些初学者可能会使用…
本文的学习内容参考:http://blog.csdn.net/yunyun1886358/article/details/5659851 http://blog.csdn.net/xudongdong99/article/details/6723163 1.使用二维数组作为形参的例子: ]) { } int main() { ][]; func(array); //用二维数组名作为实参,调用函数 } 上面的例子可以编译通过,注意,此处一定要给出第二个维度的大小,否则编译无法通过. 2.使用一维指…
C语言中二维数组做输入参数时, 可以同时指定各维长度, 可以只指定第二维的长度, 不可以只指定第一维的长度, 不可以各维长度都不指定. 一句话总结:要指定至少指定第二维,都不指定是不行的. 具体栗子如下,请食用 正确: void fun(int p[3][4]); void fun(int p[][4]); void fun(int *p, int len, int hgt);  // p[i][j] => p + i*n + j; void fun(int **p, int len, int…
StringBuilder做函数参数: static void Main(string[] args) { StringBuilder sb = new StringBuilder(); Hello(sb);//StringBuilder做为方法参数使用时不需要赋值,其使用相当于 out str Console.WriteLine(sb.ToString()); string str; World(out str); Console.WriteLine(str); Console.ReadKey…
指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一篇关于C语言编程的基础语法内容,C语言大神请绕过. 基本概念 首先,先不要把指向函数的指针认为太难了,它和普通的指针区别也不是太大,只是定义形式上有所区别. 比如,对于一个指向整形的普通指针,定义形式如下: int *p; 在定义中,指针变量的名称是p,符号“*”说明了p是一个指针,int说明这个指…
注意 这里包括形参和实参 struct dangdangtest { ]; int num; }; void change(int num)//值传递 新建一个变量接受传递的值 { num = ; } //使用结构体作为参数 浪费内存 需要建立结构体 void change2(struct dangdangtest ddt) { ddt.num = ; printf("\nmain=%p,%p",ddt,&ddt.num);//函数内部结构体地址 } //函数内部改变需要地址…
函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //参数传值调用 在C语言中,被调函数不能直接修改主调函数中变量的值,而只能修改函数私有的临时副本的值 必要时,也能够修改主调函数中的变量.需要向被调用函数提供待设置值的变量的地址(指针).被调用函…