预科C语言

1.day10

1、perror()

原型:void perror(const char *s);       根据errno呈现错误信息

perror("malloc error");

malloc error: Cannot allocate memory

2、多文件编译

.c ---预处理(.i -E)---汇编(.s -S)---二进制(.o )---链接(可执行文件)

3、结构体对齐

1)32位操作系统,最大4个字节对齐。64位操作系统,最大8个字节对齐;

2)#pragma pack(n),强制对齐,比如4、8;

4、位域

预科C语言_第1张图片

 1)赋值时不能超过该类型的承受范围;

unsigned char a:2;  // 那么a只能存 0  1  2   3  这几个数字
a = 5	;			//错误

int a:2;            //a的取值范围是0、1、-2(10,最高位1表示负数)、-1(11,最高位1表示负数)

2)位域宽度为0的位域称为空域,其作用是:该次对齐空间剩余部分全部补0;

struct xx{
			int b:1	;
			int  :0	;	// 32位对齐,b用了1位,所以该处共有31个0
			int c:3	;	// 新的对齐行
		}

5、申请结构体变量的空间

typedef struct{
		int x;
		int y;
		int z;
		char c;
		short d;
	} uu_t;
	
	uu_t *p = (uu_t *)malloc(sizeof(uu_t));

6、条件编译

#if defined(宏) || defined(宏)
代码 
#endif

    #define N(a,b)  a+10+b
    N(1,2)*10;  //  1+10+2*10,错误

最标准的写法:     
	#define N(a,b)  ((a)+10+(b))

2.day9

1、数组一旦被定义好,就不能改变大小,数组名字也不能赋值;

int arr[10]; arr = 就是错的

2、指针数组、数组指针;

char *a[2]  //指针数组,表示有a[2]个指针;
char (*a)[2]  //数组指针,表示第一维是指针;

3、scanf("%s")遇到空白符停止的特点;

4、字符串操作函数;

1)strcmp(s1, s2),返回s1 - s2的值(或者固定-1、0、1的值);

5、如何快速查看函数;

1)n + shift + k,3 + shift + k,去C库函数查找;

6、内存管理;

1)如下图所示,是虚拟内存的空间分布;

预科C语言_第2张图片

 2)栈,先进后出,地址由高到低分配;

3)内存映射的概念如图所示;

预科C语言_第3张图片

 4)输入字符指令

char arr[10] = {0};

printf("%c\n", getchar());
gets(arr);

5)重新实现strcat()函数

void fun_strcat(char arr[], char brr[])
{
    int i = 0, j = 0;

    while(arr[i] != '\0')
	    i++;

    while(brr[j] != '\0')
    {
	    arr[i++] = brr[j++];
    }

    arr[i] = '\0';
}

6)memset()函数,设置值只取1个字节;

int main(void)
{
    long long ll = 0x1122334455667788;

    memset(&ll, 0xaabbccdd, 6);  //只取0xdd值
    
    printf("%#llx\n", ll);  

    return 0;
}

3.day8

1、函数指针

1)函数的名字就是函数的首地址,就是函数指针;

double fun(int a, short b)
{
    return 0.0;
}

sizeof(fun);   //注意: 对函数名字 sizeof 没有意义 
sizeof(fun(10,20));  //注意:这里面没有做函数调用,该函数没有执行,本质 sizeof(返回值类型)

2)函数指针的使用;

xx_fun(double (*p)(int, short))
{
	p(10,20);
}

你可能感兴趣的:(c语言,开发语言)