(笔记)作为萌新第一眼看不懂的、会掉的坑

======不断更新~~~======

当初作为萌新,有几点耽误了自己。

一是嫌弃太大不用vs,

二是不会调试【f9,f5,f10,f11---其实就这么四个按键】遇到问题只能糊里糊涂、只能打输出费时间,

三是不懂得操作系统原理乱写乱搜

 

====2019.6.11,今天填写了一些过去空着的问题,感觉很像自己给自己解决作业~发现过去还不太明白的东西在工作中慢慢都接触并明确了,这种感觉还不错~=====

 

我作为新手时的困难(唉~),所以我本片博客就尽量把这些写清楚。

最希望能有的:     分块注释,关键理解部位注释。
我需要却难找的:    简洁、有效、必要、可运行的代码。
一些坑:   目录结构,配置环境,数据类型转换,不会调试,不会用一些常用库函数,动态数组,常用赋值(初始化)技巧。

 

一、代码用法、逻辑

——总会有让人看不懂的代码,就像词汇咱都认得,但不明白整句话的意思……

1.if\循环的()里套用函数

比如==1,代表if内的函数已经执行后是否成功,不成功则跳出;重要的是,那个函数已经执行在if判断时!

#include<stdio.h>
int func()
{
	printf("我来自func \n\n");
	return 0;
}
int main()
{
	if (0 == func())//当返回0的时候,func函数内的操作已经执行完毕了
		printf("func返回了0~");	
	return 0;
}

2.函数内套用函数(包括递归)

把函数当作一种操作,需要实实在在改变参数的值就加个(&)引用,把函数操作当作return的东西来用。

(0)调用函数

比如在高中数学里,我们有y=f(x);f(x)=3x;

在C语言里我们有:

#include<stdio.h>
int f(int a)
{	return 3 * a;}
int main()
{
	int y;	int x = 7;
	y = f(x);
	printf("%d", y);
}

(1)函数形参引用&

#include<stdio.h>
void f(int &a)//注意这里的&
{
	a = 3 * a;
}
int main()
{
	int x=1;
	f(x);
	printf("%d", x);//x从1变成了3
}

(2)递归

#include<stdio.h>
void f(int a)//注意这里的&
{
	//截止条件
	if (a < 0)	return;
	//本层操作
	printf("%d ", a);
	//递归机
	f(a - 1);//注意这里网下一层传递的是a-1,在变小,不会导致无限递归;
}
int main()
{
	f(6);
	return 0;
}

3.void型指针(其实就是4字节的,可以随意转化成任意类型的指针)

#include<stdio.h>
void rt_init_thread_entry(void* parameter)
{
	printf("%c", parameter);
}
void main()
{	
	void* asd=(void*)1;
	rt_init_thread_entry(asd);
}

4.stack<int> st是什么意思(容器类,数据结构那样的操作,使用起来更方便)

#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int> vec;
	vec.push_back(9);
	cout << vec[0] << endl;
	return 0;
}

5.打破常用套路:for循环内有多个判断条件\循环内处理

for(单次表达式;条件表达式;末尾循环体){中间循环体;}

for循环里条件需要用“&&不是习惯的“,”。而且处理部分也可以放到末尾循环体中。

#include<stdio.h>
int main()
{
	int i, j=5;
	for (i = 0; i < 10 && j < 20; i++, ++j, printf("\n"))
	{
		printf("i=%d ", i);
		printf("j=%d ", j);
	}

	return 0;
}

6.new 类的构造函数

结构体只能:new 结构体类型名

类里就可以在括号里放构造函数的参数了~:new 类名(构造函数参数)

 

 

二、操作系统、工程配置相关

——脱离操作系统、编译器、工程配置去学习编程语言是不健全的!

这部分是我……“想写”csdn写一篇“算法与工程”,讲大学期间算法牛逼人就厉害,工作当中则是配置环境、生成与调用动态库的问题。”

1. 环境变量

这个问题就涉及到系统如何搜索命令了,

顺序是搜索当前文件夹、搜索系统目录、搜索环境变量目录

 

2.cmd框里的命令其实就是.exe文件的文件名。(cmd命令)

这个问题其实就是操作系统的使用问题,和环境变量有些关系……

 

3.linker(链接器)

程序需要走 源代码(预处理、编译出)目标文件(链接出)可执行文件,这一流程。

可见链接器在其中的作用。

 

4.python的交互编程、脚本编程(关系类似于Linux的shell、shell脚本)

交互编程类似于命令行

脚本编程类似于平时写c++那样,只不过运行时是“边编译处理成中间代码边解释运行“的。

 

5.堆内存、栈内存(烫烫烫、屯屯屯)

内存的初始化问题

详见我的另一篇博客:https://blog.csdn.net/sinat_27382047/article/details/72810390

 

6.常用目录结构简称、

等我再单独写一篇把链接发出来

 

三、编程语言【有些函数不是你想象的那样执行结果】

——想要写好算法,深度了解这些坑的原理是非常必要的!不然总是出现与预期不一样的莫名其妙的错误谁受得了!!

 

1.C语言里float 3按照int读取,莫名其妙是0.00000(类型转换)

float a=3;
int b=(int)a;
printf("%d",b);

深入到汇编语言你就会了解到,不同类型变量只是读取数据时指针的长短和格式不一样,同一段数据用不动方式qui读当然会不一样

 

2.memset为什么设置为0的时候才不会出乱码

因为赋值的东西容易被用不同方式去读取,如同上一问。。

注意:memset如果去设置某些带有构造、析构函数的类型的变量会导致函数指针被清零导致寻址错误。

 

3.sizeof的内存补齐

int 4,int 4,char 1。加一块得7,但是用sizeof得出来是12(下面这段代码运行完输出12,而不是7)

#include<stdio.h>
struct A
{
	int a;
	int b;
	char c;
};

void main()
{
	printf("%d", sizeof(struct A));
}

 

4.typedef与结构体的一种声明成员的区别

https://blog.csdn.net/u013632190/article/details/47720703

 

5.c、c++ 、extern

 

6.如何编写socket

 

 

6.指针和引用的区别

指针更加灵活:一可以为空,二可以换指其他地址。


7.句柄标记系统资源,指针标记物理内存地址。


8.malloc/free是库函数(不在编译器控制权限之内,不能用于析构和构造任务),new/delete是运算符

 

9.const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。

 

10.指针、内存首地址

指针存着一段内存的首地址,用free释放的是那段内存给操作系统,但是指针变量本身不会被删除。

 

11.大端小端

同样是存储和读取方式不一样

 

 

====================最后提醒=================

一定不要忘记初始化变量

new\delete, malloc\free 配套使用

delete\free 之后,要让指针为 null

警惕数组越界

避免野指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超自然祈祷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值