C语言笔记

内存四区:
    在C语言中函数默认都是全局的;使用static关键字可以将函数设置为静态的。
    使用static修饰的函数只能在本文件中使用。
    
    extern int age;    //有一个变量是int型的,名字是age,已经在其他文件中定义了,这里就可以直接使用了.
    int age;        //定义了一个int型变量,名字是age.
    
    每一个应用程序都有独立的内存区域.
    
    代码区(code):存放可执行的二进制代码.在程序执行的过程中是不会改变的.
    堆区:程序动态申请的区域.程序运行过程中其大小是动态.
    栈区:存放局部变量.是一种先进后出的内存结构.对于局部变量,什么时候入栈,什么时候出栈,是不需要程序控制的,由C编译器实现.
          栈的大小是动态的.
          栈溢出:当栈空间已满,但还往栈中压变量,这个就叫栈溢出.栈的空间很小.
    全局区(静态区):存放全局变量和静态变量.
    
    对于32位操作系统,最大管理内存是4GB,其中1GB是给操作系统自己用的,剩下的3GB是给应用程序用的.
    
    堆内存的分配与释放:
        malloc分配内存;            //void *malloc(size_t size);
        free释放内存;            //void free(void *ptr);
        在堆中申请空间是不会自动释放的,必须使用free进行释放.
        malloc和free是成对使用的.
        
堆、栈和内存映射:
    定义数组的时候大小必须是常量,不能变量。
    栈是从高地址向低地址方向增长的.先进后出.
    
    操作系统在管理内存的时候,最小单位不是字节,而是内存页.


寻找数组中的最大和第二大元素:
    第一步:假设数组中的前两个元素就是第一大和第二大元素,max和smax;
    第二步:从第2号元素开始遍历比较,当有元素大于max时,smax=max,max=最大的那个元素。
    第三步:如果当前元素小于max并且大于smax,则smax等于这个元素.
        void max_and_smax(int *arr, int len)
        {
            int max,smax,i;
            if(arr[0]>arr[1]){
                max = arr[0];
                smax = arr[1];
            }else{
                max = arr[1];
                smax = arr[0];
            }

            for(i=2;i<len;i++){
                if(arr[i]>max){
                    smax = max;
                    max = arr[i];
                }else if((arr[i]>smax) && (arr[i])<max){
                    smax = arr[i];
                }
            }

            printf("max = %d, smax = %d\n",max,smax);
        }


结构体定义与成员初始化:
    结构体的内存对齐模式;
    结构体在内存中是个矩形,而不是一个不规则形状。

函数形参中的数组,编译器会把它作为指针来处理。这是C语言的特色。

数据类型的本质:固定大小内存块的别名。

变量的本质是什么?是一段连续内存空间的别名。

指针也是一种数据类型。

字符逆序和逆序打印;

const修饰符的介绍。const修改变量,不会改变变量的作用域。

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

猜你喜欢

转载自my.oschina.net/cht2000/blog/1634905