C语言
grin : (0~.~0)
这个作者很懒,什么都没留下…
展开
-
递归 与 栈
递归与栈原创 2022-10-20 16:57:55 · 96 阅读 · 0 评论 -
运算符重载函数作为类成员函数和友元函数
当作为友元函数时,运算符重载函数为非成员函数,这也意味着this指针无法使用,需要把函数中的参数补全而作为类成员函数时,可以忽略一个参数,this->成员(this的地址为当前对象的地址)假如对“+”运算符进行重载,...原创 2022-06-08 17:47:51 · 117 阅读 · 0 评论 -
静态成员函数调用静态成员的前提
必须要对静态数据成员进行初始化然后才能在静态成员函数使用些数据成员,不然在vs2019community就会出现link200的编译错误原创 2022-05-22 23:26:41 · 84 阅读 · 0 评论 -
对静态数据成员进行初始化
1.如果希望同类的各个对象中的数据成员的值是一样的,就可以把它定义为静态数据成员。2.静态数据成员是在编译时预留空间的,在程序开始运行时被分配空间,到程序结束才释放空间。3.静态数据成员可以初始化,但只能在类体外进行初始化。但要注意的是,不能用构造函数的参数初始化表对静态数据成员进行初始化。如下4.静态数据成员既可以用对象名引用,也可以用类名引用。(这点与静态成员函数非常相像)...原创 2022-05-22 23:23:04 · 5131 阅读 · 0 评论 -
c++成员函数与this指针
class stu {public: //stu(int n, float s) :num(n),score(s){} void change(int n, float s) ; //void display() { cout << num << " " << score << endl; }private: int num; float score;}; void stu::change(int n, float s) { num =.原创 2022-05-22 13:13:11 · 177 阅读 · 0 评论 -
第一次写出链表(不太完整)
#include <iostream>using namespace std;typedef struct sd{ struct sd* next; int num;}stu;stu* creat(int n)//n为结点数{ stu* head; head = new stu; stu* pr; cin >> head->num; pr = head; for (int i = 0;i < n-1;i++) { stu*.原创 2022-05-12 12:25:28 · 57 阅读 · 0 评论 -
很有意思的一个错误
由于调用creat函数时需要输入5个数字,因此当执行print(creat(5))时仍需要输入5个数字#include <iostream>using namespace std;typedef struct sd{ struct sd* next; int num;}stu;stu* creat(int n)//n为结点数{ stu* head; head = new stu; stu* pr; stu* pf; cin >>...原创 2022-05-05 11:25:15 · 55 阅读 · 0 评论 -
我遇到的 多级指针问题
我遇到的问题:我需要头指针来传递给print函数 ,但我不知把头指针定义在主函数,还是自定义函数里,因此我想用多级指针,在print函数里,设置形参sd ** a和intnvoid print(sd** head ,int n)//n为结点{}然后调用这个函数时,print(head,5)我误认为head是一个指向sd类型的变量,因此需要多级指针来接受head这个实参后来意识到:int a;int *p=&a;这时,假如把实参...原创 2022-04-30 23:09:28 · 89 阅读 · 0 评论 -
用int (*b)[ ]表示二维数组
int (*b)[3] ,b为指向包含三个元素的一维数组的指针变量对于一维数组a[] ,定义一个指针 int *b=a;可用*(b+i)来访问一维数组的内容对于int(*b)[3],你可以用(*(b+i))[ j]来访问第i行第j列的元素也可以用 b[i][j]来访问第i行第j列的元素也可以用*b[i]+j来访问第i行第j列的元素多多尝试...原创 2022-04-16 16:15:50 · 588 阅读 · 0 评论 -
char*与char[]
对于char* 前面隐含着 const,它使得s成为一个不可改变的变量因此,用*(s+1)来改变其中的第二个字符是不行的但是,对于字符数组,可以进行这种操作原创 2022-04-03 13:04:39 · 76 阅读 · 0 评论 -
int *p(int,int)和int (*p) (int,int)的区别
int (*p)(int,int)是一个指向函数的指针int *p (int,int) 是一个函数声明,表示返回一个指针这跟优先级有关, ()的优先级高于* ,p先与()结合对于指向函数的指针,用赋值语句 p=函数名即可,函数名是入口地址。int (*p)(int,int);max(int,int);//事先定义的函数p=max;//此时p就和max函数的作用差不多同样的,可以拓展,int *p[ n]和int (*p)[n]的区别[ ]的优先级比*高,所原创 2022-04-02 13:12:48 · 1596 阅读 · 0 评论 -
将一个宏被另一个宏使用
带参数的宏定义的一般形式如下:#define <宏名>(<参数表>) <宏体>一.如下图 我想要计算一个三角形的面积我要定义两个宏:一个用来表示:s=1/2*(a+b+c) 一个用来表示:(s-a)(s-b)*(s-c)刚开始我的代码是这样:编译器告诉我未定义标识符s因此改为下方的代码:a,b,c是s(a,b,c)的参数,也是area(a,b,c)的参数这样就...原创 2022-03-21 13:36:45 · 1318 阅读 · 0 评论 -
printf和scanf的返回值
printf的返回值是 输出的字符数scanf 的返回值是 读入的项目数int main(){ int a; int b; int t1,t2; //t1,t2用来接收返回值 t1 = scanf_s("%d%*d%d", &a, &b); //‘ * ’具有跳过的意思,就是跳过你写的这个数 t2 = printf("%d,%d\n", a, b); printf("%d,%d\n", t1, t2); return 0;*的作用阐述原创 2022-03-19 17:33:19 · 157 阅读 · 0 评论 -
C语言结构体中的字符数组的赋值
一,如果对 char course[20] 就会报错。原因分析:因为在字符串数组中,你在声明这个字符串的时候可以进行初始化char[20]="123456";但是不能像下面这样 这段代码char a[20];a[20]="123456";这时候就相当于对一个字符串数组里的一个元素赋值。并且是不合法的,因为a[20]已经超出了数组容量下面这个图片 只对course[1]赋值是可以的解决方案:需要用到strncpy函数百度百科:.原创 2022-03-15 23:50:30 · 4617 阅读 · 1 评论 -
【无标题】
typedef是在计算机编程语言中用来为复杂的声明定义简单的别名,它与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。(源自百度百科)1.zhengshu 相当于 int#include <stdio.h>typedef int zhengxing; //这时 zhengshu 就相当于 int int main(){ zhengxing a = 1; pri原创 2022-03-14 21:33:51 · 56 阅读 · 0 评论 -
一个数恰好等于它的因子之和
完数定义:完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。截至2018年,相关研究者已经找到51个完全数下面是错误代码#include <iostream>using namespace std;in原创 2022-03-12 11:11:02 · 4492 阅读 · 0 评论 -
while(c=getchar()
题目不完整,应该是 while((c=getchar())!='\n')题目的这句话意味着,输入一个字符,判断它是否为回车符,注意: c这个字符的值当输入回车键之后是会改变的,即便为 回车(\n)原创 2022-03-10 22:53:10 · 271 阅读 · 0 评论 -
strncmp和strcmp函数
由于是用来比较两个字符串的函数 ,所以用const char* (只能读,不能写) strcmp函数原型为int strcmp(const char* str1,const char* str2)而对strncmp int strncmp(const char* str1,const char* str2, 无符号整数)当比较两个字符串时,一个一个字符的进行对比,如果途中出现某个字符不同,就返回一个数字这个所返回的数字有一定的规...原创 2022-02-22 17:40:27 · 281 阅读 · 0 评论 -
char*[ ] 与 char[ ][ ]
这是用char[][]来 记录一月到十二月#include <stdio.h>int main(){ char a[][10] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", ...原创 2022-02-08 17:14:31 · 794 阅读 · 0 评论 -
数组名的部分知识
1. 一维数组名是一个 指针常量,存放 一维数组 第一个元素 的 地址下面为验证过程#include <stdio.h>int main(){ int a[3]; printf("%x\n", a); printf("%x", &a[0]); return 0;}2.下标和指针的关系:“如果p是个指针变量,则p[i]永远等于*(p+i)“像 p=&p[0] 尽量...原创 2022-02-05 17:08:03 · 659 阅读 · 0 评论 -
指针极小部分内容
1.指针和地址最大的区别就是指针是有类型的,地址是没有类型的。我们当然可以通过绝对地址的方式找到函数和数据,但是地址是没有类型的,不能对地址进行算术操作,在涉及诸如数组等操作时就不能通过地址的自增和自减来访问数组...2.指针是由地址和类型两部分构成的,指向数据的指针不仅记录该数据的在内存中的存放的地址,还记录该数据的类型,即在内存中占用几个字节,这是地址所不具有的。指针变量必须初始化: int *a=&b;指针指向的对象的内容是什么 指针指向...原创 2022-01-10 16:13:48 · 236 阅读 · 0 评论 -
排序时 嵌套一个for循环的注意事项( 心 手)
int i, j; a[3] = { 1,2,3 }; for (i = 0;i < 2;i++) { for (j = i + 1;j < 3;j++) { if (a[i] < a[j]) { int t = a[i]; a[i] = a[j]; a[j] = t; } } }为何 i <2j <3因为 i&...原创 2022-01-06 20:51:08 · 2981 阅读 · 0 评论 -
考试对if所感
当if(),括号里面为0则为假 括号里面为1则为真C语言中非零都可以当做真,零都可以当做假,所以赋值表达式的结果只要能比较是否等于0的都可以放在if里面。 ...原创 2021-12-23 23:13:56 · 506 阅读 · 0 评论 -
实参和形参是否共用同一个储存单元
形参只是实参的一个副本,即拷贝,它们不能公用存储单元。如果传入的是指针,那么形参就是实参的一个指针拷贝。此时,形参指针和实参指针指向同一块内存区域,虽如此,但是,不能说它们本身占同一个存储单元。...原创 2021-12-23 22:49:15 · 5822 阅读 · 0 评论 -
C语言的逻辑运算符
!||&&数学上 6 =<x<=7但在计算机要表示需要用到 && x>=6&&x<=7我想在引入一个知识点算术运算符 关系运算符 赋值运算符 x=1; 赋值表达式的左边必须是 变量逻辑运算符 也就是上面的&...原创 2021-12-20 23:32:03 · 422 阅读 · 0 评论 -
bool函数的简单应用
#include <stdio.h>bool fact(int x, int y){ if (x > y) { return true; } else { return false; }}int main(){ int a = 2; int ret; int c = 3; ret = fact(c, a); printf("%d", ret);}其实也可以用int代替它的功能原创 2021-12-12 17:19:44 · 5090 阅读 · 0 评论 -
在调用函数 来输入数组的值 的易错点
int readscore(int score[]){ int i = 0; do { scanf_s("%d", &score[i]); i++; } while (score[i] > 0); return i;}表面上没什么问题但如果运行一下,假设score【0】=10i=2;但在 while 判断时却成了 score【1】 score[1]默认=0;应该是用while...原创 2021-12-11 11:22:13 · 4151 阅读 · 0 评论 -
关于函数调用的返回值
函数的一般类型int +名字(intx,int y):他的返回值是一个整型double +名字 (int x,int y):他的返回值是一个浮点数原创 2021-12-10 23:44:15 · 157 阅读 · 0 评论 -
函数调用 得到正确返回值
#include <stdio.h>#include <time.h>int computer(int count);int main(void){ int count = 1; computer(count); printf("%d", count); return 0;}int computer(int m) //计算机随机报1个或2个{ int magic; srand((unsigned)time(NULL.原创 2021-12-02 12:52:12 · 145 阅读 · 0 评论 -
【无标题】参数的重定义
int computer(int count) { int count;}在()的intcount 便是一个定义,下面的 大括号 可以用在 {} 里的 intcount 就重定义了原创 2021-12-01 23:33:06 · 85 阅读 · 0 评论 -
初始化的重要性
double a=0;while(a>=1e-4){内容}printf(......);这时候你让a=1那么while循环则会直接跳过因为0<1e-4直接跳出循环所以a值应该好好想想原创 2021-11-28 17:35:57 · 171 阅读 · 0 评论 -
函数调用时 void类型与int类型的区别
#include <stdio.h>void la(int a,int b){ int max; max = a > b?a : b; printf("%d\n", max);}int main(){ la(3,1); la(9, 1); return 0;}这个不需要返回值,所以用void但看下面这个,当比较 x与1 的大小时,如果没有 return max;那么无法比较。1.正确的模样#inc...原创 2021-11-24 17:47:02 · 1146 阅读 · 0 评论 -
C语言一元二次方程的易错点
1.对于复数i需要用printf来输出2.不要跟数学搞混,乘除符号必不可少3.浮点数与0的比较可与整数大不一样原创 2021-11-20 16:29:24 · 431 阅读 · 0 评论 -
缺少scanf_s 的整型参数
int date1; int date2; char c; scanf_s("%d%c%d", &date1, &c, &date2); int date1; int date2; char c; scanf_s("%d%c%d", &date1, &c, 1,&date2);这两串代码的区别 &c,1&c原创 2021-11-15 22:04:26 · 3919 阅读 · 3 评论 -
计算三角形面积时的一个易错点
s = 1/2(a + b + c);s = 1/2*(a + b + c);初学时 极易将数学上的东西写进代码里计算机里的 * 必不可少原创 2021-11-14 21:07:52 · 132 阅读 · 0 评论 -
用if判断多个条件
#include <stdio.h>int main(){ int a; a = 8; if (a > 2) { if (a > 7) { printf("ture"); } } return 0;}在if大括号里面再加上一个 if如图原创 2021-11-14 20:35:57 · 947 阅读 · 0 评论 -
论C语言的一种初始化
下面是一段计算银行本金加利息的代码#include <stdio.h>#include <math.h>int main(){ double capital; double deposit; int n; double rate; scanf_s("%lf,%d", &capital, &n); if (n >= 8) { rate = 0.03; deposit = capital * pow(1 + rate, n);原创 2021-11-14 13:45:57 · 718 阅读 · 0 评论