/*
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;
}
*/


posted on 2019-02-20 14:51  seraph墨  阅读(119)  评论(0编辑  收藏  举报