• C/C++入门易错点及常用小技巧


    int型:绝对值在10^9范围内的整数都可以定义为int型

    long long 型:如果long long型赋值大于2^23-1的初值,需要在初值后面加LL,否则会编译错误。

    float,double输入输出格式:使用printf(“%f”,c)语句时,%f是float和double型的输出格式。而在使用scanf输入时,float输入格式是%f,double输入格式是%lf。

    if条件句:if(n)表示if(n==1),if(!n)表示if(n==0)

    for语句:在c中不允许for(A:B:C)语句的表达式A中定义变量(int a = 0是不允许的),C++中可以。

    数组定义:如果数字大小较大(10^6)以上,则需要将其定义在主函数外面,否则会使程序异常退出。

    数组赋初值:如果我们定义了有个数组arr[10]={12,1,6,4},可知只对数组的前四项赋值,那么后面没有赋值的元素都默认为0,但如果该数组没有赋赋值,数组中每一个元素都默认为一个随机数(不一定是0):

    1)    int arr[10] = {};

    2)    int arr[10] = {0};

    3)    memset函数:memset(arr,0,sizeof(arr));//memset按字节赋值,头文件string.h

    4)    fill函数:fill(array,array+5,8);//array[0]~arr[4]均被赋值为8,头文件algorithm

    1. 二维数组赋值:若二位数组array[4][5] = {{1,2,3,4,5},{2,2,3},{},{4,2,3,5}};//第三行用{}跳过了,如果不加大括号是无法通过编译的。
    2. 字符数组初始化:字符数组可以通过直接赋值字符串来初始化(仅限初始化,程序其他位置不允许这样直接赋值整个字符串)

    10.字符串数组的输入和输出:定义char str[10],scanf(“%s”,str); printf(“%s”,str),字符数组在输入时不需要加&取地址运算符,且scanf输入时%s通过空格或换行来识别一个字符串的结束。

    gets用来输入一行字符,gets识别换行符 作为结束标识,因为scanf完一个整数如果用用到gets,需要先用getchar接受整数后面的空格或者换行符,puts输出一行字符后会紧跟着一个换行( )

    11.字符数组长度的重要性:字符数组的长度一定要比实际存储字符串的长度至少多1,作为结束符’’,int型不需要,且如果不是使用scanf的函数%s格式或gets函数函数输入字符串,一定要手动输入的在每个字符串后加’’,否则printf和puts输出字符串将无法识别字符串末尾而输出一大堆乱码。

    12.sscanf和sprintf:

    1)        sscanf:int n;char str[10] = “123”;sscanf(str,”%d”,&n); //sscanf写法的作用是把字符串数组str的内容以”%d”的格式写到n中,从左到右,sscanf还支持正则表达式

    2)        spintf:int n;char str[10] = “123”;sprintf(str,”%d”,n); //sprint的作用是把n以”%d”的格式写到str字符数组中,从右到左

    13.引用&:引用不产生副本,而是给原变量起一个别名,由于引用是产生变量的别名,因此常量不可以使用引用。

    #include<iostream>
    using namespace std;
    void swap(int* &p1,int* &p2){
        int *temp = p1;
        p1 = p2;
        p2 = temp;
    }
    
    int main(){
        int a = 4,b = 5;
        int *p1 = &a,*p2 = &b;
        swap(p1,p2);
        cout << a << "," << b << endl;
        cout << *p2 << "," << *p1 <<endl;
        return 0;
    }

    其中不可以直接写成swap(&a,&b),必须使用指针变量p1和p2存放&a,&b,然后把指针变量作为参数传入。

    14.访问结构体内的元素:

    struct studentInfo{
        int id;
        char name[10];
        studentInfo* next;
    }stu,*p;

    于是访问stu中变量的写法:

    stu.id;stu.name;stu.next;

    访问指针变量p的元素写法:

    (*p).id  <==> p->id

    (*p).name < == > p->name;

    (*p).next < ==> p->next

    15.结构体的初始化:

    struct studentInfo{
        int id;
        char gender;
        //默认构造函数 
        studentInfo(){};
        //有参构造函数,注意变量名不要与已有变量名重复 
        studentInfo(int _id){
            id = _id;
        }
        //简化的有参构造函数 
        studentInfo(int _id,char _gender):id(_id),gender(_gender){} 
    }; 
  • 相关阅读:
    锁,你知多少呢?
    成长于我
    js write google广告
    项目三边六拍
    IT新人培养计划
    网站变灰色 代码
    职业人生
    ASP.NET 4 新特性之一二
    .net 例子
    A Better sp_who2 using DMVs (sp_who3)
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/10548646.html
Copyright © 2020-2023  润新知