基础知识 二

1,较大数组应该在main函数外声明,否则可能因为
他作为临时变量在堆栈段中占据的空间过大,栈溢出
2,string.h
memcpy(b,a,sizeof(int)*k);//a->b 复制k个元素
memcpy(b,a,sizeof(a));//a->b
memset(a,0,sizeof(a));//将数组全部填充为零
3,在做某一个动作之前要考虑能不能做,因为悔棋
有时候不允许
4,
char s[18];
strlen(s);//得到的是结束符'\0'之前的字符数
//和sizeof(s)得到的空间大小不是一回事

5,strcat(),strcmp(),strcpy()连接,比较,复制
6,scanf("%s",s);//遇到tab,或是空格时就会停下
fgetc(fin);//返回一个整数,当到达文档尾,返回EOF
getchar() 等价于 fgetc(stdin);

7,换行
\r\n windows
\n linux
\r Macos

8,fgets(buf,maxn,fin);//读取一行,没有字符就返回NULL
while((c=getchar())!=EOF){
    //循环读取得到字符
}
9,查表常量数组

10,ctype.h
isalpha() isdigit() isprint()
toupper()//变大写
tolower()//变小写

11,unsigned int 最大约为肆拾亿(32位)

12,typedef struct{ 定义内容;}类型名;

13,简化中间的表达式,考虑中间变量越界的问题

14,is_xxx() 是什么吗?0表示否定

15,sizeof(a)
    当数组a作为参数传递进入函数时,得到的是4(指针长度)
    只有当a的定义和 sizeof(a)在同一个函数中的时候,才是数组空间大小

16,素数判定

扫描二维码关注公众号,回复: 8777455 查看本文章


    is_prime(int n){
        if(n<=1) return 0;
        int m=floor(sqrt(n)+0.5);
        //使用m是为了减少每次调用sqrt()
        //加上0.5,是为了避免xxx.9999被割掉小数部分
        for(int i=0;i<=m;i++){
            if(n%i==0) return 0;
        }
        return 1;
    }    

17, 交换函数

    void swap(int *a,int *b){
        int t=*a;
        *a=*b;
        *b=t;
    }

18,访问数组的两种方式

int sum(int a[],size_t len);
int sum(int *begin,int *end);
//其中len=end-begin

19,stdlib.h
void qsort(void *base,
           size_t num,
           size_t size,
           int (*compare)(const void *,const void *));
//从base开始对num个元素排序,size=sizeof(单个元素)

int compare(const void *a,const void *b){
    return *(*int)a-*(*b);//先强制类型转换,然后解引,最后做差
}

20, 在运行时,程序会动态建立一个堆栈段,里面存放着堆栈段,
保存有临时变量和函数的调用关系,因此当递归的层数过多会发生段错误
(越界访问)、栈溢出。

发布了27 篇原创文章 · 获赞 1 · 访问量 1431

猜你喜欢

转载自blog.csdn.net/qq_34890856/article/details/88782463