-
因由
char s[10],str1[10]; for (int i = 0;i<10;i++){ str1='1'; }
起初已经几年没有再看过c语言了,在偶然下看到了这么一个题目,提出了char以/0做尾导致的数组溢出问题,决定重新看一下c语言,这个和目前的做的面向对象所不同类型的语言。以及后续所产生的一系列问题及解决和记录。
-
后续
在C语言中,字符串以char,在C#中,基本上在工作中都是直接应用String类型来存字符串,两者的区别在于值类型与引用类型。故由此来看一下值类型及引用类型。
值类型直接将内存存储在栈内,由系统自动释放资源的数据类型.常见的int,double,char。
值类型的基类来自于System.ValueType,值类型是堆栈分配,或者在结构中的以内联方式分配。
引用类型由类型的实际值引用(类似于指针,&A)表示的数据类型,常见的类,委托,接口。
引用类型是堆分配,引用用于传递参数及返回值。创建即初始化,不能有空引用。 -
至此,由空引用问题想到了之前项目中的一个小问题
在赋值过程中,初始化的空值可以正常通过;但在引用类型中赋空后,将此引用类型的对象赋值给需要被赋值的对象时,会报出未将对象引用至实例的问题。记录一下!再回到c语言与目前所用的C#中明显的不常用的类型,结构体。
单看结构体是值类型,与面向对象的类不同,是一种完全可以自定义的类型,个人理解为int这种直接存栈类型的集合,与类不同,类则是存实际数据的引用。
int a;int &b; a=&b,a!=b;a可直接用,b则无法直接使用,b为a的值的引用。