// win32test.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" void swap_point(int * &a , int * &b){
int temp = *a ;
*a = *b;
*b = temp ; //销毁调用方指针
//a = NULL ;
//b = NULL ; printf("swap_point:[0x%x] , [0x%x] \r\n" , &a , &b) ;
} void swap(int * a , int * b){
int temp = *a ;
*a = *b;
*b = temp ; //销毁调用方指针无效
//a = NULL ;
//b = NULL ; printf("swap:[0x%x] , [0x%x] \r\n" , &a , &b) ;
} void swap(int & a , int & b){
int temp = a ;
a = b ;
b = temp ; printf("swap:[0x%x] , [0x%x] \r\n" , &a , &b) ;
} int _tmain(int argc, _TCHAR* argv[])
{
/*int *ptr[3]; for(int i = 0 ; i < 3 ; i++){
ptr[i] = new int[5] ;
for(int l = 0 ; l < 5 ; l++){
ptr[i][l] = i * l ;
printf("%d * %d = %d \r\n " , i , l , ptr[i][l] ) ;
}
}*/ /*int (*ptr)[3] ; ptr = (int (*) [3])malloc(sizeof(int *) * 5) ; for(int i = 0 ; i < 5 ; i++){
(*ptr)[0] = 1;
(*ptr)[1] = 2;
(*ptr)[2] = 3;
ptr++ ;
} //初使化数组
char y[9][9] = {0};*/ int a = 3 ;
int b = 4 ; //指针通过值传递(无法修改调用方指针变量值),调用swap ,指针变量 ptra , ptrb 按【值】传递 , 其中 swap 中 int * a , int * b 分别copy ptra , ptrb 指针变量
int * ptra = &a ;
int * ptrb = &b ;
swap(ptra , ptrb) ;
printf("a = %d [0x%x] , b = %d[0x%x] , ptra = [0x%x] , ptrb = [0x%x] \r\n" , a , &a , b , &b , &ptra , &ptrb ) ; //指针通过引用传递(能修改调用方指针变量值),调用swap_point ,指针变量 ptra , ptrb 按【引用】传递 , 其中 swap 中 int * a , int * b 即 ptra , ptrb 指针变量
swap_point(ptra , ptrb) ;
printf("a = %d [0x%x] , b = %d[0x%x] , ptra = [0x%x] , ptrb = [0x%x] \r\n" , a , &a , b , &b , &ptra , &ptrb ) ; //按引用传递
a = 3 ;
b = 4 ;
swap(a , b) ;
printf("a = %d [0x%x] , b = %d[0x%x] \r\n" , a , &a , b , &b) ; system("pause"); return 0;
}
相关文章
- C#委托(delegate)的常用方式- 委托的定义 // 委托的核心是跟委托的函数结构一样 public delegate string SayHello(string c); public delegate string SayHello(string c);:定义了一个公共委托类型 SayHello,该委托接受一个 string 类型的参数 c,并返回一个 string 类型的值。 Main 方法 static void Main(string args) { // 本质上其实就是把方法当作委托的参数 SayHello sayC = new SayHello(SayChinese); Console.WriteLine(sayC("欢迎大家")); SayHello sayE = new SayHello(SayEgnlish); Console.WriteLine(sayE("Welcome to")); // 简单的写法:必须类型一样 SayHello s1 = SayChinese; SayHello s2 = SayEgnlish; Console.WriteLine(s1("好好好")); Console.WriteLine(s2("Gooood")); // 最推荐 SayHello ss1 = con => con; Console.WriteLine(ss1("niiiice")); // 匿名委托:一次性委托 SayHello ss3 = delegate(string s) { return s; }; Console.WriteLine(ss3("说中国话")); } 常规实例化委托 SayHello sayC = new SayHello(SayChinese);:创建了一个 SayHello 委托的实例 sayC,并将 SayChinese 方法作为参数传递给委托的构造函数。 Console.WriteLine(sayC("欢迎大家"));:通过委托实例调用 SayChinese 方法,并输出结果。 同理,SayHello sayE = new SayHello(SayEgnlish); 和 Console.WriteLine(sayE("Welcome to")); 是对 SayEgnlish 方法的委托调用。 简化的委托赋值方式 SayHello s1 = SayChinese; 和 SayHello s2 = SayEgnlish;:当委托类型和方法签名一致时,可以直接将方法赋值给委托变量,无需使用 new 关键字。 Console.WriteLine(s1("好好好")); 和 Console.WriteLine(s2("Gooood"));:通过委托实例调用相应的方法。 使用 Lambda 表达式实例化委托 SayHello ss1 = con => con;:使用 Lambda 表达式创建委托实例 ss1,con => con 表示接受一个参数 con 并返回该参数本身。 Console.WriteLine(ss1("niiiice"));:通过委托实例调用 Lambda 表达式。 匿名委托 SayHello ss3 = delegate(string s) { return s; };:使用匿名委托创建委托实例 ss3,delegate(string s) { return s; } 是一个匿名方法,直接在委托实例化时定义了方法体。 Console.WriteLine(ss3("说中国话"));:通过委托实例调用匿名方法。 委托引用的方法定义 public static string SayChinese(string content) { return content; } public static string SayEgnlish(string content) { return content; } public static string SayChinese(string content) 和 public static string SayEgnlish(string content):定义了两个静态方法,分别接受一个 string 类型的参数 content,并返回该参数本身。这两个方法的签名与 SayHello 委托一致,可以被 SayHello 委托引用。 常规的委托实例化、简化的赋值方式、Lambda 表达式和匿名委托。委托在 C# 中是一种强大的机制,它允许将方法作为参数传递,实现了代码的灵活性和可扩展性。
- golang中的值类型和引用类型
- Object 对象(对象的分类、属性(属性名和属性值)、基本数据类型与引用数据类型区别)
- 值类型和引用类型、装箱和拆箱、静态类和普通类、方法的重载、继承和多态、访问修饰符
- C#值类型和引用类型与Equals方法
- Swift 值类型和引用类型
- c++官方文档-按值传递和按引用传递
- Javascript高级程序设计——基本类型和引用类型的值
- C#基础知识-引用类型和值类型的区别(六)
- 在JavaScript中引用类型和值类型的区别