零散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--。