零散2

零散2

  • #include <stdio.h>
    int main()
    {
        int m []={1,2,3,4,5,6,7,8,9,0};
        int(* p)[4]=(int(*)[4])m;
        printf(“%”,p[1] [2]);
        return 0;
    }
    
    7
    
      1、int (*p)[4]:表示行指针,单位移动量为4个int类型。即p+1,则一次移动4个int类型 
    
      2、(int (*)[4])m:表示以数组指针类型组织m,每4个为一个数组 
    
      3、这样一来,m为{{1,2,3,4},{5,6,7,8},{9,0, , }},p指向第一行 
    
      4、故p[1][2]即*(*(p+1)+2),表示第二行第三个元素,为7 
    
  • %15s表示输出占15个空格的位置,并且右对齐,左边多余的位置补空格;%-5s表示输出占5个空格的位置,并且左对齐,右边多余的位置补空格

  • 关于typedef char *String_t; 和#define String_d char * 这两句,
    typedef char *String_t 定义了一个新的类型别名,有类型检查
    #define String_d char * 只是做了个简单的替换,无类型检查
    同时定义多个变量的时候有区别,主要区别在于这种使用方式String_t a,b; String_d c,d; a,b ,c 都是char*类型,而d 为char 类型
    
  • 以下关于指针的说法,正确的是(C)
    int *const p与int const *p等价
    const int *p与int *const p等价
    const int *p与int const *p等价
    int *p[10]与int (*p)[10]等价(前者是一个数组,数组里存放十个这样的指向整形数据的指针,后者是一个数组指针,p指向存放整形数据的数组)
    根据靠近原则来看,const修饰p那么就是指针本身值不变,const修饰*p那么就是指指针指向的变量值不变
    
  • C中:如果函数未指定返回值类型,则默认为int 
    
    c++中:如果一个函数没有返回值,返回值类型必须指定为void
    
  • 浅层复制:只复制指向对象的指针,而不复制引用对象本身。
    深层复制:复制引用对象本身。
    如果是浅复制,修改一个对象可能会影响另外一个对象
    如果是深拷贝,修改一个对象不会影响到另外一个对象
    
  • 一个指向基类的指针可以访问从基类派生出来的任何对象

  • struct Student{
        int num;//4
        char name[7];   //7+1
        short age;//2
        char sex;//1+1
    }student1;
    int sz = sizeof(student1);
    
    则执行上面语句后,变量sz的值为16
    
    结构成员有一个数据对齐的概念
    
  • 能实现删除文件功能的语句是
    ofstream fs("date.dat", ios::trunc );
    ofstream fs("date.dat", ios::out );
    
  • int x =5;
    const int * const p = &x;
    const int &q=x; 
    int const *next=&x;
    const int *j=&x;
    
    则有语法错误的是ABD
    
    * p =1;
    q++;
    next++;
    (*j)++;
    
    A.p是指针常量,*p是代表x的值,被定义为常量,不可再赋值,A错;
    B.&q是对x变量的引用,但被定义为了常量,故q不再是变量,不能自增,B错;
    C.如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量,故x为常量,不能改变,但是next指向x的地址,next++表示改变地址,故c选项无语法错误;
    D.(*j)++表示x的值自增,但是const int *j=&x表示x为常量,不能改变,故d错误
    
  • 以下系统中,int类型占几个字节,指针占几个字节,操作系统可以使用的最大内存空间是多大:
    32位下:4,4,2^32     64位下:4,8,2^64
    
    
  • int i = 1;
    int j = i++;
    if((i>j++) && (i++ == j)) i+=j;
    
    i最后为5
    
    
  • 函数的定义不可以嵌套,调用可以

  • 实参和与其对应的形参各占用独立的存储单元

  • C++不是类型安全的

  • 有如下类定义:
    class A
    {
    public:
        int fun1();
        virtual void fun2();
    private:
        int _a1;
        static int _a2;
    };
    class B: public A
    {
    public:
        virtual void fun2();
    };
    
    请问sizeof(B)的值为: 8
    
    32位系统,B继承A,包含一个int变量,同时自己里面有个虚函数指针,指向虚表;
    64位系统,int还是4个字节,但是指针为8个直接,为了字节对齐所以占用16个字节 
    两者共用一个指针指向的存储空间,不管有多少个虚函数,都只分配一个指针指向的存储空间
    
    
  • typedef struct ST{ 
        long a; int b; char c[2]; 
    } NEW; 
    
      如果前面没有typedef, 则ST是结构体类型,NEW是结构体变量; 
    
      如果有typedef,则ST和NEW都是结构体类型
    
    
  • 文件指针是程序中用FILE定义的指针变量
    文件指针指向的是一块内存区域,这块区域存储着打开的文件的相关信息,包括文件读取指针当前位置、文件读取缓冲区大小等信息,并不是指向文件的。fscanf是从文件中格式化读取,fprintf才是向文件中格式化写入。 
    
    
  • int i=0;
    const int ci=i;
    auto b=ci; //(1)
    int * p=&i;
    decltype(*p) c=i;//(2)
    
    以上(1)(2)中变量b,c类型为int , int&
    
      (1)auto会忽略顶层const,所以b的类型为int 
    
      (2) 如果表达式的内容是解引用操作,则decltype将得到引用类型 
    
      decltype和auto都可以用来推断类型,但是二者有几处明显的差异: 
    
      1.auto忽略顶层const,decltype保留顶层const; 
    
      2.对引用操作,auto推断出原有类型,decltype推断出引用; 
    
      3.对解引用操作,auto推断出原有类型,decltype推断出引用; 
    
      4.auto推断时会实际执行,decltype不会执行,只做分析。
    
    
  • >>是算术右移操作符
    >>>是逻辑右移操作符
    
    
  • int * ( *ptr )();ptr是指向函数的指针,该函数的返回值是指向int型数据的指针

  • 在c++中的结构体可以有构造函数

  • 函数ftell(fp)的作用是得到流式文件中的当前位置

  • a=125.534取整为125

  • heap一般由程序员分配和释放,若程序员不释放,可能会造成操作系统的内存泄露
    stack由系统自动分配,无需程序员干涉,heap需要手动申请
    
    
  • 有语句char str[] = “abcde”;请问表达式sizeof(str)的值是6

  • 函数 rewind的作用是使位置指针重新返回文件的开头

  • int *p[4]; //表示指针数组,有四个元素,每个元素都是整型指针。 
    
    int (*p)[4]; //表示行指针,所指对象一行有四个元素。
    
    int *p(void); //表示函数,此函数无参,返回整型指针。
    
    int(*P)(void) ;//表示函数指针,可以指向无参,且返回值为整型指针的函数。
    
    
  • 已知:int a,&ra=a;关于ra的描述中正确的是ra是int型变量a的引用
    &在=后边才属于取地址,在=前就应该引用啊
    
    
  • 整型变量可以分为int型、short型、long型和unsigned型四种

  • C语言中整型常量数据的表示形式有三种,即八进制、十六进制和十进制。

  • 位运算的对象只能是整型或字符型数据

  • 语言编译程序若按软件分类则是属于系统软件

  •   \>>为带符号右移,右移后左边的空位被填充为符号位 
    
      \>>>为不带符号右移,右移后左边的空位被填充为0 
    
      没有<<< 因为<<后右边总是补0 
    
    
  • #inlcude <> 首先 只搜索系统目录,不会搜索本地目录.比如你自己写一个头文件,你用#include <>会出错.  
    
    #include ""首先搜索本地目录,如果本地目录没有才会搜索系统目录. 
    
    语句#include <stdlib.h>程序编译速度比#include “stdlib.h”要快
    
    
  • 在这里插入图片描述

  • 类的实例化:cla *p = new cla,p分配在栈上,p指向的对象分配在堆上。 
    
      n为静态成员变量,没有this指针,属于类域,所有对象共享。 
    
      实例化——调用构造函数,所以n++; 
    
      delete——调用析构函数,所以n--。
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值