C#学习笔记——语法基础部分

***博主已有C语言基础,所以以下只是一些个人觉得与C语言不同的地方和注意点;***

 

 C#的HelloWorld代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Hello World!");
            Console.ReadKey();
        }
    }
}

解释:

Console是控制台

WriteLine:写一行

ReadKey:读键,可以暂停我们的程序,等待用户输入一个按键

 

三种注释

1、单行注释 //

2、多行注释  /*  */

3、文档注释   ///

 

 

变量与数据类型

1、变量命名必须以字母 _ @ 开头,但是_和@尽量不要使用,因为他们有特殊的意义

2、变量名不能与系统中的关键字重复

3、C#大小写敏感

4、变量的命名规范与其他语言一样,驼峰命名法

5、float类型既能存储整数又能存储小数,它可以精确到7位小数,如果要赋值为小数那么值后面必须要加f

6、char类型不能存空,只能存一个字符

 

 

运算符与表达式

与C语言基本一致,需要注意的点有

1、占位符:

语法结构:{0},{1},{2},在后边按顺序写变量填坑

 

 

转义符

\n \"  \t \b \\与c语言基本一致

@用在字符串的前面,有两种用途

1、取消“\”在字符串中的转义作用,时期单纯的表示一个斜线,多用于路径

2、将字符串按照原格式输出

 

 

类型转换与常量

1、隐式类型转换(可直接转换):转换需要满足两个条件(1)两种类型要兼容,比如都为数值类型(2)原类型要小于目标类型的

2、显示类型转换【强制类型转换】:两个条件:(1)两种类型兼容(2)原类型大于目标类型的

3、int和int相加是int的,int和double相加是double的

4、Convert类型转换:

string num1 = "3.15";
string num2 = "198";
double num3 = Convert.ToDouble(num1);
double num4 = Convert.ToInt32(num2);
Console.WriteLine(num3);//3.15
Console.WriteLine(num4);//198
Console.WriteLine(num3 + num4);//201.15
Console.ReadKey();

小例子:整数加法计算器

            Console.WriteLine("请输入加数:");
            int a = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("请输入被加数:");
            int b = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("{0}+{1}+{2}", a, b, a + b);
            Console.ReadKey();

5、常量的语法定义:

const 数据类型 常量名 = 值;//常量不能二次赋值

常量名一般是全大写,如SERVER_IP,PI

 

 

数组

1、声明

数据类型[] 数组名;

如:int[] intArray;  double[] doubleArray;

2、初始化

数组名 = new 数据类型[数组长度]

声明可以和初始化合二为一:数据类型[] 数组名 = new 数据类型[数组长度];

又或者不指定数组长度:int[] intArray = new int[] {1,2,3,4,5,6,7,8,9};

3、数组长度获取  数组名.length

例如:intArray.length

4、遍历数组的方法 for 或foreach

foreach(int i in intArray)
{
    Console.WriteLine(i);
}

5、数组元素的初始值

元素默认值:

int,float,double -> 0

string -> NULL

bool  ->  false

 

 

值类型与引用类型

1、值类型存储在内存中的栈中

int a = 10;
int b = a;

//这时候单独修改b的值,a的值不会改变,这叫做值传递
//这时候变量之间的传递就是拷贝一个值给对方

2、引用类型

数组、字符串

内存:引用类型的值存在内存中的堆中

int[] intA = new int[]{1,2,3,4};

int[] intB= intA;

这个时候单独修改intB中的值,intA的值会发生改变,这种传递叫做引用传递。

这个时候变量之间的传递就是拷贝一个地址给对方。 

 

数组的内存结构

数组在内存中是一块连续的存储空间存储的

 

 

二维数组基本语法

1、声明与初始化

声明:数据类型[,] 数组名;

初始化:数组名 = new 数据类型[行数,列数]

例如:int[,] intArray = new int[3,3];

数组取值的时候应该是  intArray[0,0]是第一行第一个元素,并不是C语言的[0][0]

2、获取某个轴向的元素个数

数组名.GetLength(轴向下表);

比如intArray.GetLength(0)获取的横向长度,1则是纵向长度

遍历二维数组

            int[,] intArray = new int[,]{
                {1,2,3},
                {10,20,30},
                {100,200,300}
            };
            for(int i=0;i<intArray.GetLength(0);i++)
            {
                for(int j=0;j<intArray.GetLength(1);j++)
                {
                    Console.Write(intArray[i, j]+"\t");
                }
                Console.WriteLine();
            }
            Console.ReadKey();

结果:

 

 

函数的声明

与C语言不同的就是前面要加static,static是静态标识符

static void hello()
{
    Console.WriteLine("hello");
}

声明后不调用也是不执行的

 

 

函数普通调用

就是简单的值传递,函数里改变参数不会改变形参的值

        static void Main(string[] args)
        {
            int num = 10;
            Console.WriteLine(Add10(num));//输出20
            Console.ReadKey();
        }

        static int Add10(int num)
        {
            num += 10;
            Console.WriteLine(num);//输出10
            return num;
        }

 

函数ref调用

作用:将一个变量传入一个函数中进行“处理”,“处理”完成后,再将“处理”后的值带出函数。

调用函数,会将函数加载到栈空间中,加了ref,传递的就是一个地址,也就是“”引用传递“”

要求:函数外必须为变量赋值,而函数内可以不赋值

        static void Main(string[] args)
        {
            int num = 10;
            Console.WriteLine(Add10(ref num));//输出20
            Console.ReadKey();
        }

        static int Add10(ref int num)
        {
            num += 10;
            Console.WriteLine(num);//输出20
            return num;
        }

 

 

 

函数out调用

作用:一个函数如果返回多个不同类型的值,就要用到out参数。

要求:函数外可以不为变量赋值,而函数内必须为其赋值。

形参和实参前面都要加out关键字

        static void Main(string[] args)
        {
            //演示:声明一个Number 函数,传入2 个数值,返回最大,最小,和,平均值。
            int a = 10;
            int b = 5;

            int m_max;
            int m_min;
            int m_total;
            double m_avg;

            Number(a, b, out m_max, out m_min, out m_total, out m_avg);
            Console.WriteLine("Max:{0},Min:{1},Total:{2},Avg:{3}", m_max, m_min, m_total, m_avg);

            Console.ReadKey();
        }

        static void Number(int a, int b, out int max, out int min, out int total, out double avg)
        {
            //最大,最小.
            if (a > b)
            {
                max = a;
                min = b;
            }
            else
            {
                max = b;
                min = a;
            }

            //和.
            total = a + b;
            //平均值.
            avg = total / 2;
        }

 

ref和out的异同:(个人心得)

相同点:两者都是按地址传递的,使用后都将改变原来参数的数值。

不同点:ref可以把参数的数值传递进函数,并将修改后的参数返回。但是out是要把参数清空,就是说你从out传递进去的参数会被初始化为0。

 
 
 
 
 
 
 
 
 
 
 
 
 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值