/*
1. a 和 &a 有什么区别请写出以下代码的打印结果
#include<stdio.h>
void main( void )
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
return;
}
a为数组首元素地址,&a为整个数组的地址(长度不同,地址值相同)
2,5
2. sizeof和strlen的区别
sizeof 返回传入参数所需的存储空间大小
strlen 只能传入字符串指针,返回该字符串长度,不包含"\0"
对于字符串,strlen返回值比sizeof小1;
3. 写一个“标准”宏MIN
#define MIN(x,y) (x) < (y) ? (x) : (y)*/
//4.编码实现直接插入排序
#include<stdio.h>
int chapai(int *p, int n)
{
int i,j,tem;
for(i = 1; i < n; i++) {
tem = p[i];
for(j = i-1; j >= 0 && p[j] > tem; j--) {
p[j+1] = p[j];
}
p[j+1] = tem;
}
return 0;
}
int main(void)
{
int arr[]={2,6,2,4,8,5,3,9,1,7,1};
int n = 11;
chapai(arr, n);
for(int i = 0; i < n; i++) {
printf("%d,",arr[i]);
}
printf("\n");
return 0;
}
/*
5. 野指针是如何产生的,如何避免
野指针就是指向一个已删除的变量或者超出作用域的指针
其产生1,定义变量时未赋初值, 如:int *p;
2,指针释放后未置空,如:p = malloc(sizeof(int)); free(p);
3,超出作用域,如:
int some(int *p)
{
int a = 10;
p = &a;
return 0;
}
避免方法,定义时若不赋初值就先赋值成NULL; free后将指针赋值为NULL; 赋值时
注意作用域*/
/*
6. #include 的是顺序是自上而下的,如果头文件之间有包含依赖关系时,顺序不同可
能会导致编译错误;
避免隐含依赖,应采用C标准库、C++标准库、其他库的头文件、自己工程的头文件的顺
序。不过测试时应先包含自己工程所需要的头文件,进行测试
尖括号与双括号的搜索顺序不同,尖括号优先搜索系统include目录,找不到再搜索
源代码所在目录,而双引号则相反,先搜索源代码目录后搜索系统默认目录。故系统头文件用尖括号,自建头文件用双引号。
7. 字节对其可以提高CPU访问数据的效率;
字节对齐的原则:标准数据类型只要地址是它长度的整数倍。数组按照基本类型对
齐,联合按包含的长度最大的数据类型对齐。结构体中的每个数据类型都要对齐。
8. 内联函数是在它所调用的位置展开,其优点可以减少调用次数消除函数调用和返回
所带来的开销,优化运行速度。其缺点是代码会变长,会占用更多的内存空间或指令缓
存。
内联函数是嵌入代码,在调用位置不是跳转,而是直接将代码写入进去。对于短小
的多次使用的代码有一定效率提升,但会增加空间消耗。同是内联函数要做参数检查。
而宏函数是在代码出单纯的做文本替换,不进行验证,使用时容易发生各种错误,要减
少使用。
9. 定义一个函数,把一个字符串倒序。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int trans(char *str)
{
int i,n;
n = strlen(str);
char *p = NULL;
p = malloc((n+1) * sizeof(char));
strcpy(p,str);
for(i = 0; i < n; i++) {
str[i] = p[n-1-i];
}
str[n] = ‘\0‘;
return 0;
}
int main(void)
{
char str[] = "abcd";
printf("%s\n",str);
trans(str);
printf("%s\n",str);
return 0;
}
/*
10.
加密
int encry(int n)
{
int g,s,b,k,x;
k = n/1000; k = (k+5)%10;
b = (n/100)%10; b = (b+5)%10;
s = (n/10)%10; s = (s+5)%10;
g = n%10; g = (g+5)%10;
x = g*1000 + s*100 + b*10 + k;
return x;
}
解密
int decry(int n)
{
int g,s,b,k,x;
k -= 5; if(k < 0) k += 10;
b -= 5; if(b < 0) b += 10;
s -= 5; if(s < 0) s += 10;
g -= 5; if(g < 0) g += 10;
x = g*1000 + s*100 + b*10 + k;
return x;
}
*/
原文:https://www.cnblogs.com/764120305l/p/10406586.html