C语言知识点
C语言的基础知识
没什么..
一个可爱的人
展开
-
自定义结构体类型
自定义类型:结构体 枚举 联合1.结构体类型的声明2.结构的自引用3.结构体变量的定义和初始化4.结构体内存对齐5.结构体传参6.结构体实现位段(位段的填充&可移植性)1.结构体类型的声明struct Tag{ member-list;}variable-list;2.结构的自引用结构体的自引用并不是自己的结构体内包含自己本身,这样是错误的。例如struct Node{ int date; struct Node next;};//这样的结构体是错的,你原创 2020-11-27 19:32:35 · 993 阅读 · 0 评论 -
指针的经典题目解析
数组名的意义1.sizeof(数组名) – 数组名表示整个数组2.&数组名–数组名表示整个数组除了这两种情况以外其余的数组名都代表首元素地址一维数组int main(){ //数组名是首元素的地址 int a[] = { 1, 2, 3, 4 }; printf("%d\n", sizeof(a));//计算的数组的总大小,单位是字节 16 printf("%d\n", sizeof(a + 0));//数组名表示首元素地址,a+0还是首元素地址,地址(指针)的大小在32位平台原创 2020-11-26 10:01:49 · 435 阅读 · 0 评论 -
内存函数
void* memcpy(void* dest,const void* src,size_t num)size_t num 拷贝过去内容所占大小—单位是字节void* —通用类型指针—无类型指针struct S{ char name[20]; int age;};int main(){ int arr1[] = { 1,2, 3, 4, 5 }; int arr2[5] = { 0 }; memcpy(arr2, arr1, sizeof(arr1)); struct S arr3原创 2020-11-24 13:03:32 · 236 阅读 · 0 评论 -
字符串函数和字符函数
一.strlen求结果?#include<stdio.h>int main(){ if (strlen("abc") - strlen("abcdef") > 0) { printf("hehe\n"); } else { printf("haha\n"); } return 0;}strlen 返回的是一个(size_t)unsigned int 类型的数。所以结果返回的是hehe ,因为3-6 = -3 但是在内存中是以补码的形式进行存储的,返回的原创 2020-11-19 20:36:31 · 299 阅读 · 0 评论 -
指针进阶的详解
1.字符指针2.指针数组3.数组指针4.数组传参和指针传参5.函数指针6.函数指针数组7.指向函数指针数组的指针8.回调函数一.字符指针int main(){ char* p = "abcdef"; //这是一个常量字符串,意思并不是把"abcdef"传给指针p,因为在32位平台指针只占4个字节,而这个都有6个 //字节了,所以他的意思是把首字符的地址传给了a //printf("%c\n", *p); a printf("%s\n", p); // "abcdef原创 2020-11-15 18:43:08 · 271 阅读 · 0 评论 -
数据存储解析和例题
一.原码,反码,补码对于无符号数,原码反码补码相同原码 反码 补码三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同①原码直接将二进制按照正负数的形式翻译成二进制就可以②反码//将原码的符号位不变,其他位依次按照取反就可以得到了③补码//在反码的基础上加1int main(){ int a = 20; //00000000000000000000000000010100 --原码 //00000000000000000原创 2020-11-14 19:03:57 · 371 阅读 · 0 评论 -
C语言:交换两个变量在不创建变量情况和一些很好的题目
这是正常的求解方法,创建一个临时变量:int mian(){ int a = 3; int b = 5; int tmp = 0; printf("before: a = %d b = %d\n", a, b); tmp = a; a = b; b = tmp; printf("before: a = %d b = %d\n", a, b); return 0;}在不创建临时变量的情况下交换两个数的数值:①加减法int main(){ int a = 3; int原创 2020-11-10 15:05:14 · 213 阅读 · 0 评论 -
C语言中的递归问题
一. 递归程序员调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中广泛应用。1.一个过程或函数在其定义或说明中有直接或者间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量。2.递归的主要思考方式在于:大事化小二.递归的两个必要条件1.存在限制条件,当满足这个限制条件的时候,递归便不再继续2.每次递归调用之后越来越接近这个限制条件例如:练习1:/原创 2020-11-09 19:45:17 · 804 阅读 · 2 评论 -
预处理复习
1.程序的翻译环境在这个环境中源代码被转换为可执行的机器指令。2.程序的执行环境它用于实际执行代码。3.详解:C语言程序的编译 + 链接组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库, 将其需要的函数也链接到程序中。1 预处理 选项 gcc -E test.c -o test.i 预原创 2020-12-02 21:47:48 · 267 阅读 · 0 评论 -
文件操作复习
1.什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀 为.exe)。数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内 容的文件。2.文件名一个文件要有一个唯一的文件标识,以便用户识别和引用。文件名包含3部分:文件路径+文件名主干+文件后缀例如: c:\code\test.tx原创 2020-11-29 21:14:57 · 315 阅读 · 0 评论 -
动态内存分配复习
为什么要存在动态内存分配呢?int val = 20; // 在栈空间上开辟4个字节char arr[10] = { 0 }; //在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:1.空间开辟大小是固定的(太过具有局限性)2.数组在什么的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况,有时候我们需要的空间大小在程序运行的时候才知道,那数组的编译时开辟空间的方式就不能满足了。所以这时候就需要引入动态内存开辟了。malloc#i原创 2020-11-29 14:45:48 · 308 阅读 · 0 评论 -
C语言练习好题目
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字例如:2+22+222+2222+22222int main(){ int a = 0; int n = 0; scanf("%d%d", &a, &n); int sum = 0; int i = 0; int ret = 0; for (i = 0; i < n; i++) { ret = ret * 10 + a; sum += ret; } printf("sum =原创 2020-12-01 11:03:54 · 290 阅读 · 0 评论