1.数组A【5】【6】的每个元素占5个单元,将其按行优先存储在起始地址为1000的连续的内存单元中,则元素A【4】【4】的地址为?
答案是1140
A【0】
A【1】
A【2】
A【3】共四行4X6=24;
A【4】24+4=28; 28X5=140, 1000+140=1140
按列也是相同原理先经过列
在C语言中,顺序存储长度为3的字符串,需要占用4个字节
末尾\n也要算上
2.设有一个长度为n的顺序表,要在第i(从1开始)个元素之前(也就是插入元素作为新表的第i个元素),则移动元素个数为n-i+1
题目中说了从1开始
1 2 3 4 5
n = 5
要在第i=2个元素之前插入
则n-i=3
而实际插入位置为:
1 [ ] 2 3 4 5
所以是n-i+1
3.
局部变量在函数中会空间释放 不会返回 局部变量 就只能直接输出 而不能返回地址
4.同一个操作系统下,不同类型的指针变量所需要的内存大小相同 ,不同类型只代表向下一个位置的移动多少字节
5.内存泄漏是指 你向操作系统申请了一块内存 但由于你的操作失误 这块内存你再也访问不到了 但是操作系统还认为 这是你申请的内存 这块内存三不管了 导致内存堆积
6.malloc实际上申请的是虚拟内存,calloc申请的是物理内存
7.C语言支持bool类型 不过要引入相关头文件
8.编译的整个过程
预编译 编译 汇编 链接
预处理的命令是在预编译期间处理的
C和C++中 以#开头的都是预处理命令
9.C语言的位运算,是将数值在二进制的表示下进行的运算
10.switch 语句能判断具有唯一整型值对应的变量 整形或单个字符
11.
&&短路的特征 前面为0后面直接不执行了
13. C语言 某些数学函数比如 abs在stdlib头文件中,不一定全部都在math;
14.函数的返回值 不一定都是return 比如指针的引用 ,
哥德巴赫代码 二分法查找 奇数的减去两个素数 剩下的是否满足是素数
#include <stdio.h>
#define P(func){\
printf("%s = %d\n",#func,func);\
}
// 1 3 5 7 9 10
int binary_search1(int *num, int n,int x){
int head=0,tail=n-1,mid;
while(head<=tail){
mid=(head+tail)>>1;
if(num[mid]==x) return mid;
if(num[mid]<x) head=mid+1;
else tail=mid-1;
}
return -1;
}
//111111110000000
int binary_search2(int *num,int n){
int head=-1,tail=n-1,mid;
while(head<tail){
mid=(head+tail+1)>>1;
if(num[mid]==1) head=mid;
else tail=mid-1;
}
return head;
}
//00000001111111
int binary_search3(int *num,int n){
int head=0,tail=n,mid;
while(head<tail){
mid=(head+tail)>>1;
if(num[mid]==1) tail=mid;
else head=mid+1;
}
return head==n ? -1:head;
}
int main(){
int arr1[10]={1,3,5,7,9,11,13,17,19,21};
int arr2[10]={1,1,1,1,1,1,0,0,0,0};
int arr3[10]={0,0,0,0,0,0,1,1,1,1};
P(binary_search1(arr1,10,7));
P(binary_search2(arr2,10));
P(binary_search3(arr3,10));
return 0;
}