![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言
C语言的进阶
写不出bug的小李
所有事情在一开始才是它最原本的样子,越往后越偏离
展开
-
细讲内存四区
概念:既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。1.程序通过变量来申请和命名内存空间 int a=0.变量定义形式:类型 标识符,标识符,标识符;1.思考数据类型和内存有什么关系吗?2.c/c++为什么会引入数据类型?//typedef和结构体结合使用。变量:一段连续内存空间的别名。2.通过变了名访问内存空间。原创 2024-03-30 20:54:46 · 488 阅读 · 0 评论 -
C语言关于操作符的两道笔试小题(另加一个)
【代码】C语言关于操作符的两道笔试小题。原创 2024-03-27 20:04:09 · 198 阅读 · 0 评论 -
模拟实现字符串函数1(详细版本)
【代码】模拟实现字符串函数1(详细版本)原创 2024-03-26 20:41:25 · 563 阅读 · 0 评论 -
文件操作(超详细版本)
在程序设计中我们谈的文件可以分为两类:程序文件和数据文件(从文件功能的角度上来讲)。原创 2024-03-02 15:17:53 · 874 阅读 · 1 评论 -
C语言程序编译和执行过程
重点:gcc编译过程。原创 2024-02-28 16:49:33 · 336 阅读 · 1 评论 -
关于动态内存分配的笔试题(二)
分析:使用了一块已经被释放的内存str,这就是非法访问内存。并且free释放str指向的空间后,并不会把str置为NULL,所以if判断没有意义。分析:变量x属于栈区,当f1函数调用结束时,栈区的内存会自动还给操作系统,所以x的那块地址已经是未知的,所以再将其地址作为函数的返回值就会存在非法访问内存的问题。分析:定义指针时没有给指针初始化,又紧接着给指针赋值,这会出现非法访问内存问题。问题:程序输出world,但非法访问内存(篡改动态内存区的内容)问题:非法访问内存(野指针问题)原创 2024-02-17 23:00:22 · 312 阅读 · 1 评论 -
关于动态内存开辟的两道经典笔试题
跟题目一类似,当Test函数调用GetMemory函数之后,数组p会还给操作系统,所以虽然str指向的初始位置和p的起始位置相同,但是后面的内容已经不是“helllo world”,所以是一些随机值,再将这些随机值打印就会出现非法访问内存的现象。1.GetMemory函数中参数p只是str的一份临时拷贝,因为是值传递(也就是只传的是str这个指针,并没有传str这个指针的地址),所以在调用完GetMemory函数之后str还是原来的空指针。答案:该运行程序会崩溃,具有非法访问内存的现象。原创 2024-02-17 21:56:07 · 367 阅读 · 1 评论 -
一维数组与二维数组的创建、初始化和储存
一、一维数组1.数组的创建数组是一组相同类型的集合。数组的创建方式:type_t arr_name [contest_n];//type_t是指数组的元素类型//const_n是一个常量表达式,用来指数组的大小介绍一下strlen和sizeof的区别strlen和sizeof没什么关联strlen是求字符串长...原创 2023-11-25 16:20:11 · 356 阅读 · 0 评论 -
三道函数小题:判断是否是闰年、是否是素数和二分查找
一、用函数打印100-200之间的素数#include<stdio.h>int is_prime(int i){ int n=0; for(n=2;n<i;n++) { if(n%i==0) return 0; } return 1;}int main()...原创 2023-11-28 23:15:36 · 383 阅读 · 0 评论 -
数组作为函数参数(冒泡排序)
往往我们在导代码的时候,会将数组作为参数传个函数,比如我们要实现一个 冒泡排序:函数讲一个整形数组进行排序(主要讲算法思想)#include<stdio.h>void bubble_sort(int arr[],int sz){ int i=0;//确认冒泡函数的趟数 //int sz=sizeof...原创 2023-11-27 20:05:41 · 328 阅读 · 0 评论 -
函数的嵌套调用、链式访问、声明、定义与递归
1.用一个程序来解释函数的嵌套调用#include<stdio.h>void new_line(){ printf("hehe\n",i);}void three_line(){ int i=0; for(i=0;i<3;i++) { new_line(); }}...原创 2023-11-30 22:51:08 · 335 阅读 · 0 评论 -
移位操作符和位操作符的使用方法
一、移位操作符1.右移操作符分为两种:算数右移:右边丢弃,左边补原符号位逻辑右移:右边丢弃,左边补0注:现在的计算机一般都是用第一种:算数右移举例:#include<stdio.h>int main(){ int a=16; int b=a>>1; printf("%d",b);//...原创 2023-12-03 23:35:03 · 332 阅读 · 0 评论 -
关于指针(定义、指针类型的意义、野指针)
一、指针定义指针是一个变量,存放内存单元的地址(编号)二、指针类型的意义首先,用一段代码计算一下不同类型指针的长度分别是多少#include<stdio.h>int main(){ printf("%d\n",sizeof(int*)); printf("%d\n",sizeof(char*))...原创 2023-12-08 14:42:36 · 372 阅读 · 0 评论 -
C语言中四道典型小题
1.0 请问循环要循环多少次?#include<stdio.h>int main(){ int i=0; int k=0; for(i=0,k=0;k=0;i++,k++) k++; return 0;}解答:改代码循环0次,原因:for循环中判断语句为k=0恒为假,所以循环0次。...原创 2024-01-23 08:23:39 · 378 阅读 · 0 评论 -
冒泡函数与高级冒泡函数(qsort函数)
一、普通的冒泡函数(整数排序)#include<stdio.h>void bubble_sort(int* arr,int sz){ int i=0; for(i=0;i<sz-1;i++) { int j=0; for(j=0;j<sz-i-1;j++) {...原创 2023-12-18 23:29:16 · 464 阅读 · 0 评论 -
++x||y++&&z++ (x++||y++&&z++)的判断真假
前言:当我们学习操作符尤其到了研究关于算数题时非常头疼,今天帮助大家解决这些问题首先我拿出一段代码,接下来的研究都会根据这段代码来进行:#include<stdio.h>int main(){ int a=0;b=0;c=8; int d; d=a++||b++&&c++; ...原创 2023-12-13 23:09:15 · 339 阅读 · 0 评论 -
三种方法带你实现计算器
一、第一种:普通函数的调用+switch语句#include<stdio.h>void menu(){ printf("*************************"); printf("*****1. add 2.sub******"); printf("*****3. mul...原创 2023-12-17 16:35:32 · 392 阅读 · 0 评论 -
字符串函数的使用和剖析
1.strlen(求字符串长度)注:strlen函数以'\0'为结束标志,strlen函数返回的是'\0'前面的字符个数(不包含'\0')参数指向的字符串必须要以'\0'结束注意函数strlen函数的返回类型是size_t---无符号类型(皆为正数)学会strlen函数的模拟函数1.0此函数的应用#include<s...原创 2023-12-29 12:55:55 · 344 阅读 · 0 评论 -
函数中的库函数与自定义函数
1.函数是什么:在计算机科学中,子程序也就是函数,是一个大型程序中的某部分代码,由一个或多个语句组成。负责完成某项特定任务,而且相对于其他代码,具有相对的独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏,这些代码通常被集成为软件库。2.库函数举例:lo函数字符串操作函数字符操作函数内存操作函数时间/日期函数...原创 2023-11-26 23:05:32 · 288 阅读 · 0 评论 -
位段的介绍与使用
1.0位段介绍:位段 位--二进制位位段的声明与结构是类似的,但是有两个不同:位段的成员必须是:int 、unsigned int、signed int ;位段成员名后面必须有一个冒号和一个数字。位段作用:可以很大程度上节省空间计算位段所占用的空间:struct S{ int a:2; int b:5; i...原创 2024-01-08 17:41:54 · 319 阅读 · 0 评论