一文说清 C++指针与C#引用类型
一、C++ 指针
简单来说,指针是一个地址,其指向存储某一个数据的存储地址。此外,还有一个指针变量的概念,指针变量是一种特殊性质的变量。指针变量是把地址存放在一个变量中,然后通过先找出地址变量 中的值(一个地址),再由此地址找到最终要访问的变量的方法,这就是指针变量及其访问方法,而地址变量就是指针。
定义的语法形式:
存储类型名 数据类型 *指针变量名
赋值的语法形式:
存储类型 数据类型 *指针名 = 初始地址值;
#include<iostream> using namespace std; int main() { /*非指针 int a = 10; int pa = a; //a赋值给pa pa = 20;//修改pa,a不会改变 */ int a = 10; int *pa;//定义指针 pa = &a;//a的地址赋值给pa *pa = 20;///修改*pa,a随着pa一起变化 cout << "a=" << a << endl; //a = 20 }二、C#引用类型
在C#中,引用类型(Reference Type)与值类型(Value Type)是两种基本的数据类型分类。引用类型包括类(Class)、接口(Interface)、数组(Array)等,而值类型包括结构体(Struct)、枚举(Enum)、基本数值类型如int、float等
1.判定数组为引用类型
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 { internal class Program { static void Main(string[] args) { /* 值类型 int a = 8; int b = a; b = 100; //把100赋值给b,不会引起a值变化 Console.WriteLine(a); */ //引用类型 int[] a = { 1, 2, 3 }; int[] b = a;//a赋值给b,a、b指向同地址 b[0] = 100;//把100赋值给b[0],会引起a[0]值变化 Console.WriteLine(a[0]); } } }2.判定类为引用类型
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 { internal class Program { static void Main(string[] args) { /*值类型 int p1 = 10; int p2 = p1; p1赋值给p2,p1、p2指向堆里不同地址 p2 = 20;//修改p2,p1不变 */ //引用类型 Person p1 = new Person(); p1.Name = "张三"; p1.Age = 25; Person p2 = p1;//p1赋值给p2,p1、p2指向栈里同一地址 p2.Name = "李四";//修改p2值,p1会变化 p2.Age = 20;//通过p2可改p1 Console.WriteLine($"姓名:{p1.Name},年龄:{p1.Age}" ); } } class Person { public string Name { get; set; } public int Age { get; set; } } }以上不足,请老师、同行大佬批评指正。
