1、嵌套循环中如果当前循环没必要执行则continue,如果本次子循环任务已完成则break,如果任务已经完成则goto
2、我记得以前有一道题是这样的:“不用循环、不用if、不用go输出1 2 3 ... 998 999 1000”,很明显就只能用递归,代码可以这样写:
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv) { // argv 也可以不要,argc默认传入1
argc < 1001 && printf("%-4d", argc) && main(argc + 1, argv);
argc == 1 && system("pause");
return 0;
}
上面是main自己调用自己,那么再写一个间接调用main:
程序代码:
#include <stdio.h>
#include <stdlib.h>
void f(int n) {
n < 1001 && printf("%4d", n) && main(n + 1);
}
int main(int n) {
f(n);
n == 1 && system("pause");
return 0;
}
这样的效果是一样的。
3、内存有很多小格子,每个小格字里面能存放一个字节(8个二进制位(bit))也就是它能表示256种不同的状态:00000000、00000001、00000010、00000011 ... 11111100、11111101、11111110、11111111,(说白了就是能表示0 ~ 255的整数)比如1G的内存就有 1 * 1024 * 1024 * 1024 个字节(格子),有1 * 1024 * 1024 * 1024 * 8个二进制位(bit),静态内存它存在于你的程序中,也就是说它会占用你的程序大小,程序执行时和程序代码一起被操作系统载入内存。动态内存代表在程序运行时向操作系统申请内存空间,这不一定是成功的(平坦寻址的时代似乎已经不存在这个问题了)。栈代表先进后出(用搜索引擎查找会有更好的解释),堆是内存中的一部分,动态分配内存就是在这里进行的。
4、野指针(这个名字不文雅),主要是指对该指针进行解除引用会用导致异常,书上大多说这个是不确定行为,比如声明了一个指针变量而没有赋正确的值就进行解除引用,或者使用已经调用free之后的指针,为防止这种情况可以把它置NULL即可。
5、我不明白什么是“结构体字节”,你是想问如何计算一个结构体的大小吗?可以用sizeof(struct 结构体名字)或sizeof(结构体变量名),或者是你想知道是如何计算出这个大小的?首先找出哪一个字段的类型占用空间最大,然后把每个字段加起来的实际大小 % sizeof(最大类型) ? 每个字段加起来的实际大小 : 每个字段加起来的实际大小 -(每个字段加起来的实际大小 % sizeof(最大类型) + sizeof(最大类型) ;应该就是这样的。代码:
程序代码:
#include <stdio.h>
int main(void) {
struct {
int integer; // 假设你使用的是32位操作系统,那么sizeof(int)返回4
char character; // sizeof(char)返回1
} s;
printf("%u\n", sizeof(s));
// 输出8,为什么?因为最大字段类型为int(4个字节),所以 每个字段实际大小为5(sizeof(int) + sizeof(char)),最大类型(sizeof(int))的大小为4
// 所以 5 % 4 ? 5 : 5 - (5 % 4) + 4 == 8;
return 0;
}
6、链表和数组要在不同场合使用的,链表查找元素慢,删除元素快。数组查找元素快,删除元素慢。
7、宏属于一种编译时期的文本替换,什么是“与析函数”?“用宏操作类私有数据”这个更不能理解???