
一分钟学习C语言
文章平均质量分 70
梦回阑珊
程序员,年二十有九,始从文,连考而不中。 遂习武,练武场上发一矢,中鼓吏,逐之出。 改学IT,自撰一函数,用之,堆栈溢出。无奈之际,发现一洞,刻有武学,为C++、QT、python、opencv,练之,终驰骋天下。
展开
-
《每天一分钟学习C语言·十三》
如果存在多级指针的内存释放,一定要从内往外释放,先释放每个一级指针内存,最后释放二级指针内存。如果先释放了二级指针内存,那就找不到指向首元素的地址了,也就找不到每个一级指针的位置,一级指针的内存还留在某个空间里得不到释放。(3)存储方式不同:const常量会进行内存分配(C++中,对于简单类型的临时常量会保存在符号表里面进行替换,而不会分配内存),而define仅仅是展开,不会分配内存。先申请一个二级指针内存空间,每个元素是一个一级指针,在给每个一级指针分配内存空间,并存入0,1,2值。原创 2024-02-02 20:37:15 · 214 阅读 · 0 评论 -
《每天一分钟学习C语言·十二》各种指针问题
函数的参数为void *表示传入的参数可以为任意类型的地址,这里传入int *类型的arr,这时需要在函数内部做个强转把void *转为int *,return的时候可以return任何类型地址,如return (int *)a,在主函数接受这个返回地址时一定要用void *类型接收,不能用任意类型地址接收,不然会报错,然后可以把void *类型返回值强转其他类型打印。MAX int i;//相当于extern int i;arr为多少,最终值都是100,这是一个约定,但实际。头文件stdlib.h。原创 2024-01-16 19:32:12 · 400 阅读 · 1 评论 -
《每天一分钟学习C语言·十一》static静态,内联函数,宏函数,排序
内联函数的定义与调用该函数的代码必须在同一文件中,如果有多个文件需要使用某个内联函数,一般将内联函数定义在头文件中。头文件一般只放函数声明,但内联函数是例外,需要在头文件定义。普通函数可以在其他文件调用,但需要在文件中加入包含这个函数申明的头文件。或者直接在文件全局处申明这个其他文件的函数,然后就可以在这个文件中调用这个函数了。static全局变量只能在本文件中使用,普通全局变量可以在一个项目下的所有文件中使用,需要加extern。如果在主函数直接给宏函数赋常量,如SUM(5);第一元素是数组首元素地址。原创 2024-01-08 19:58:34 · 478 阅读 · 1 评论 -
《每天一分钟学习C语言·十》二维数组与二维指针,判断字符大小写,char arr[]和char * arr区别等
因为p和i是两个独立的个体,首先把i赋给p,这时p指向i地址即NULL,然后通过函数给P分配内存,这时p不在指向i地址,而是重新指向一个分配好内存空间的地址,i依然是NULL。//a是指向第一个元素的地址,第一个元素是含有两个int的数组,所以a是指向含有两个Int数组的指针,可以写成int (*a)[2] == int[2] (*a)//定义一个指针数组,b里面的每个元素是一个int *即地址,又b是第一个元素地址,故b是一个指向地址的指针,p = b;(2)而int ** p中的p是指向地址的指针。原创 2023-12-24 16:53:14 · 465 阅读 · 1 评论 -
《每天一分钟学习C语言·九》引用,指针函数,函数指针等
/函数指针,返回的是一个int型的值,但这个函数是一个指向函数的指针,如果有另一个函数g()赋给f时,可以f = g,也可以f=&g。//这里a就是变量i,printf(i) == printf(a),printf(&a) == printf(&i)(3)申明一个引用不是定义了新的变量,只是目标变量的一个别名,引用本身不是一种数据类型,因此不占存储单元,系统也不会给引用分配存储单元。(4)对引用求地址,就是对目标变量求地址,&a == &i。(9)引用的本质是指针常量,地址不可变,值可变。原创 2023-12-24 16:38:51 · 464 阅读 · 1 评论 -
《每天一分钟学习C语言·八》字符串,指针与二维数组,补码,按位取反
/把字符串str2拼接到str1后面形成新的字符串str1,末尾自动加\0 (注意:str2字符串在见到str1字符串的空字符开始拼接,拼接成新的字符串内容拷贝到str1指向的内存空间,拷贝的是内容不是地址)(2)a[0]是第一个大元素,可以看成b,则b[0],b[1]分别是这个大元素数组里的第一、二个元素,则a[0]是大元素里第一个元素的地址,即a[0] == &a[0][0]//两字符串从左到右ascii码值比较,相等返回0,str1>str2返回正整数,str2>str1返回负整数。原创 2023-12-23 19:30:42 · 994 阅读 · 1 评论 -
《每天一分钟学习C语言·七》指针、字节对齐等
int占四个字节,double占八个字节,所以int自动补齐四个字节一共八个字节是double整数倍,这时一共4+4+8=16个字节是char字节数的整数倍,这时总字节数为4+4+8+1=17不满足是最大成员变量double字节数的整数倍,故在自动补齐7个字节,这时一共是24个字节。显示结果错误,p没有初始化,随意的指向了内存的一个空间,又把这个地址给了q,及p,q指向了一个相同的内存空间,*q修改了这个内存空间的内容是错误的,不确定的一个内存空间的内容是无法读写的。q = 3,则i的值会变。原创 2023-12-22 16:40:51 · 1286 阅读 · 1 评论 -
《每天一分钟学习C语言·六》
16/5 == 3(两个整数相除结果默认整数) 16/5.0==3.20000(只要有一个小数,结果默认为小数)scanf不接受回车和空格,并且遇到回车结束(scanf(“%c”, &ch);数组名为第一个元素的地址,若定义数组int a[5];1字节(Byte)=8位,1KB=1024字节,1M=1024KB,1G=1024MB。赋值运算符:= += *= /= -=关系运算符:> >= < 关系>逻辑>赋值。这里是ASCII码转换。原创 2023-12-22 16:08:54 · 502 阅读 · 1 评论 -
《每天一分钟学习C语言·五》
这些都不是可执行代码,而是编译器用于产生可执行代码的信息,可执行代码通常在源代码中,而不再头文件,比如定义了一个book.h头文件,里面放声明,可执行代码的定义放在book.c源文件中,在book.c写定义的时候也要加上头文件book.h。一个指针定义了后没有初始化或者赋地址值,就不知道这个指针指向内存中的哪个地方,容易引起程序崩溃,如。注:头文件只能有宏定义,函数声明,结构声明(结构体联合体)和内联函数,如果定义变量如int i;Cx16零次方+2x16一次方+3x16二次方=812。原创 2023-12-21 15:18:40 · 415 阅读 · 1 评论 -
《每天一分钟学习C语言·四》文本读写操作及二进制读写
/从fp指向的文件中读取n-1个字符送入字符数组str,因为最后要加’\0’,fp必须是读或者读写的方式打开文件指针,正常读取函数返回str首地址,读取失败返回null。//ch为定义的一个字符,fp为把ch这个字符写入到fp所指向的文件中去,若写入操作成功函数返回写入字符的ascii码,否则返回EOF。“rb”,”wb”,”ab”,”ab+”,”a+b”,”wb+””w+b”,”ab+”,”a+b”以二进制模式而非文本模式打开文件。原创 2023-12-21 14:49:31 · 914 阅读 · 1 评论 -
《每天一分钟学习C语言·三》
在主函数或者该文件其他函数内部用关键字extern修饰这个变量,就等于共用了这个变量,共用之后一处修改处处改变,其实也可以不必用extern再次修饰,既然在同一个文件中,并且num变量有是全局的,在函数内部直接拿来用就行了。enum+标记名,如enum color这和结构体很像无论枚举的成员是什么类型,都被系统默认为int型,但成员实际是enum color类型,只是值被默认为int。如果a和b都被成功读入,那么scanf的返回值就是2如果只有a被成功读入,返回值为1如果a和b都未被成功读入,返回值为0。原创 2023-12-20 16:55:46 · 1012 阅读 · 1 评论 -
《每天一分钟学习C语言·二》
strcpy(地址或字符串,地址或字符串)字符串拷贝,把第二个字符串拷贝到第一个字符串上面,第二个字符串的结尾符’\0’也会拷进来,函数读到空字符结束。不可以是字符,两字符串比较相同返回0(假),不同返回非0(真)(如果前者排在ascii码前面返回-1,否则返回1,如strcmp(“a”,”b”)返回-1)。char arr[3][3]表示有三行,每行有三个字符组成的数组,也可以表示,有三行每行存有一个字符不超过三的字符串。Strncat(地址a,地址b,长度)把b字符串拼接到a上,拼接多少由长度控制。原创 2023-12-19 18:13:57 · 445 阅读 · 1 评论 -
《每天一分钟学习C语言·一》
getchar每次读取一个字符,输入abc回车后,第一个while循环中的getchar先读取a赋值给ch,判断和’y’不相等进入第二个while循环,内循环的getchar继续读取一个字符b赋值给ch,此时ch里面的值已经由a跟新为b,判断不是回车符输出b,内循环还未结束,getchar继续读取下一个字符c与回车符比较,不等输出c,继续读取回车符,这时相等,结束内循环来到外循环。若arr[0]=’b’;2、八进制前面有0,%o或者%#o表示八进制,十六进制前有0X,%0x或者%#0x表示十六进制。原创 2023-12-19 17:18:24 · 504 阅读 · 1 评论