农产品网站建设及优化项目,商务网站建设 视频,南宁企业网站建站,wordpress 做app第1题#xff1a;常见数据类型大小
这边以64位计算机系统#xff0c;环境而言。 类型 存储大小 值范围 char 1 字节 -128 到 127 或 0 到 255 unsigned char 1 字节 0 到 255 signed char 1 字节 -128 到 127 int 4 字节 -32,768 到 32,767 或 -2,147,483,648…第1题常见数据类型大小
这边以64位计算机系统环境而言。 类型 存储大小 值范围 char 1 字节 -128 到 127 或 0 到 255 unsigned char 1 字节 0 到 255 signed char 1 字节 -128 到 127 int 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 unsigned int 4 字节 0 到 65,535 或 0 到 4,294,967,295 short 2 字节 -32,768 到 32,767 unsigned short 2 字节 0 到 65,535 long 8字节 -2,147,483,648 到 2,147,483,647 unsigned long 8 字节 0 到 4,294,967,295 float 4字节 6位有效数字 double 8字节 15位有效数字 Long double 16字节 19位有效数字 Bool 1 bit 常用 0和1表示真假 第2题 内存泄漏和内存溢出是什么
1内存溢出指程序申请内存时没有足够的内存供申请者使用。或者说给了你一块存储int类型数据的存储空间但是你却存储long类型的数据那么结果就是内存不够用此时就会报错Out Of Memory,即所谓的内存溢出。
2内存泄漏是指程序在申请内存后无法释放已申请的内存空间。一次内存泄漏似乎不会有大的影响但内存泄漏堆积后的后果就是内存溢出。
第3题 指针变量大小
在C语言中指针变量的大小是由其所在的系统和编译器决定的并且通常与计算机系统的地址总线宽度有关。指针变量的大小表示的是它所能存储的内存地址的位数而不是它所指向的数据的大小。
在大多数现代32位系统上指针变量的大小通常是4字节32位。而在64位系统上指针变量的大小通常是8字节64位。这是因为指针需要足够的空间来存储一个完整的内存地址。
第4题 逗号运算符和前置加加后置加加结合运算
c #include stdio.h int main() { int a 10, b 20, c; c (a, b--, a b); printf(a %d, b %d, c %d\n, a, b, c); return 0; } //输出结果 a11b19,c30 逗号运算符会从左向右依次计算然后保留最后一个计算结果。
但是逗号运算符优先级没有“”赋值优先级高所以一定要注意
这题如果没有结果将完全不一样。 第5题.h头文件中的ifndef/define/endif的作用?
答:防止该头文件被重复引用。
第6题.用变量a给出下面的定义 问题一一个整型数 答案int a;
问题二一个指向整型数的指针 答案int*a;
问题三一个指向指针的的指针它指向的指针是指向一 个整型数 答案int**a;
问题四一个有 10个整型数的数组 答案int a[10];
问题五一个有 10个指针的数组,该指针是指向-个整型数的 答案int *a[10];
问题六一个指向有10个整型数数组的指针 答案int (*a)[10];
问题七一个指向函数的指针该函数有一个整型参数并返回一个整型数 答案int (*a)(int );
问题八一个有10个指针的数组该指针指向一个函数该函数有一个整型参数并返回一 个整
型数
答案int(*a)[10](int)
问题九int*(*a[10])(int*)是什么
答案int*(*a[10])(int*) 是一个相对复杂的C语言声明。为了理解这个声明我们可以使用C语言的“右左法则”或“螺旋法则”来逐步解析它。
首先我们来看整个声明的最右侧部分int*。这表示一个指向int的指针。
然后我们向左移动看到(int*)。这表示一个函数它接受一个int指针作为参数。
继续向左我们看到*a[10]。这里a是一个数组包含10个元素。每个元素都是一个指针指向之前提到的那种函数。
所以int*(*a[10])(int*) 的意思是a是一个包含10个元素的数组每个元素都是一个指针指向一个函数。这个函数接受一个int指针作为参数并返回一个int指针。 第7题 预处理器 #define 使用
问题1用预处理指令#define声明一个常数, 用以表明1年中有多少秒(忽略闰年问题)
#defineSECONDS_ PER_ YEAR (60 * 60 * 24 * 365)UL
解答
#define语法的基本知识(例如:不能以分号结束,括号的使用等等)
懂得预处理器将为你计算常数表达式的值 因此直接写出你是如何计算一年中有多
少秒而不是计算出实际的值是更清晰而没有代价的。
意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L告诉编译器
这个常数是的长整型数。
如果你在你的表达式中用到 UL (表示无符号长整型) 那么你有了一个好的起点。记
住,第一印象很重要.
问题2用宏定义写一个三目运算符求最大小值 答案
// 宏定义求最大值
#define MAX(a, b) ((a) (b) ? (a) : (b)) // 宏定义求最小值
#define MIN(a, b) ((a) (b) ? (a) : (b)) 记住宏定义只是词的替换不具备安全类型检查。
第8题 请用三条C语言语句交换两个整数变量的值不准使用中间变量
答
通过加减法
aab; ba-b; aa-b;
通过异或来操作
a a ^ b; // 将a和b的异或结果赋值给a b a ^ b; // 此时a是异或后的结果再与原来的b异或就得到了原来的a的值赋值给b a a ^ b; // 此时b已经是原来的a的值再与现在的a异或就得到了原来的b的值赋值给a
第9题结构体大小计算
计算原则 1. 结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处 2. 其他成员变量要对⻬到某个数字对⻬数的整数倍的地址处。 对⻬数 编译器默认的⼀个对⻬数 与 该成员变量⼤⼩的较⼩值。 - VS 中默认的值为 8 - Linux中 gcc 没有默认对⻬数对⻬数就是成员⾃⾝的⼤⼩ 3. 结构体总⼤⼩为最⼤对⻬数结构体中每个成员变量都有⼀个对⻬数所有对⻬数中最⼤的的 整数倍。 4. 如果嵌套了结构体的情况嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处结构 体的整体⼤⼩就是所有最⼤对⻬数含嵌套结构体中成员的对⻬数的整数倍。 int main()
{//练习1 struct S1{char c1;int i;char c2;};printf(%d\n, sizeof(struct S1));//练习2 struct S2{char c1;char c2;int i;};printf(%d\n, sizeof(struct S2));//练习3 struct S3{double d;char c;int i;};printf(%d\n, sizeof(struct S3));//练习4-结构体嵌套问题 struct S4{char c1;struct S3 s3;double d;};printf(%d\n, sizeof(struct S4));return 0;
}
答案
S1:12字节
S2: 8 字节
S316 字节
S4: 32字节
由1和2可以看出来内存小的成员放前面可以有效节省内存浪费。 第十题 联合体/共用体大小计算
计算原则 1.联合的⼤⼩⾄少是最⼤成员的⼤⼩。 2.当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候就要对⻬到最⼤对⻬数的整数倍。 #include stdio.h
union Un1
{char c;int a;};
union Un2
{char c[5];int i;
};
union Un3
{short c[7];int i;
};
int main()
{//下⾯输出的结果是什么printf(%d\n, sizeof(union Un1));printf(%d\n, sizeof(union Un2));printf(%d\n, sizeof(union Un3));return 0;
}
答案Un1:4字节 Un28字节 Un3 16字节
第十一题常见存储类型
知识补充
数据完整的定义格式
存储类型特征类型数据类型变量名
存储类型
特征类型
数据类型
变量名 auto:
作用
static:
作用
extern:
作用
register:
作用
const只读