for语句
for()语句缺省含义
第一个表达式缺省代表进入循环体之前无任何操作
第二个表达式缺省代表进入循环体无任何条件限制
第三个表达式缺省代表循环体结束之后无任何操作
typedef 用法
- 用typedef为现有类型创建别名,定义易于记忆的类型名
eg: typedef int(现有类型) size(便于记忆类型)
(#define identifier value 相反eg:#define MAX_MODULESIZE 25) - typedef还可以用来掩饰复合类型,如指针和数组
eg: 你不用像下面这样重复定义有128个字符元素的数组
char line[128];
只需要这样定义,Line 类型即代表了具有128个元素的字符数组,使用方法如下:
typedef char Line[128];
使用:
Line line;
同样也可以像下面隐藏指针用法:
定义:typedef char * pstr;
const pstr p1; // 定义一个常量指针
3.typedef int (*FUNCTION_PARA)(int a,int b);
typedef struct PARA {
FUNCTION_PARA func_para;
} para_t;
FUNCTION_PARA 就是函数指针类型了,记住就行了
2:接下来要说的是#define 中的 #和##的作用
采用的编译器依旧是clion,
代码如下:
#include <stdio.h>
#define STR(x) #x
#define CON(x,y) (x##y)
#define call(x,y) x##y
int main()
{
printf("=====%s\n",STR(love));
printf("=====%d\n", CON(1111,222222));
int x=2,y=5;
// int xy=90;
char xy[] = "hello world";
// printf("-----%d\n",call(x,y));//结果为90
printf("-----%s\n",call(x,y));//结果为hello world
return 0;
}
其中的#是把参数字符串化。即传进去的是love 出来的是“love”,如果传进去的是是“love”,则传出来的是““love"”
然后是##是把x和y搞成一个整体,然后在看这个整体是什么,输出的结果就是什么了
编程好习惯总结
int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
int area;
area = LENGTH * WIDTH;
printf("%d\n",area);
return 0;
}
请注意,把常量定义为大写字母形式,是一个很好的编程实践。
C / C++ 引用
注意:引用只有在C++中存在。
引用变量其实就是起个别名
不存在空引用。引用必须连接到一块合法的内存。
引用必须在创建时被初始化。指针可以在任何时间被初始化。
int i = 17;
int& r = i;
int x = 90,y = 80;
swap(x, y);
(相当于int &a = x,int &b = y)
void swap(int &a, int &b){
int c = 0;
c = a;
a = b;
b = c;
}
随机数生成理解
time_t time(time_t *t);
如果t是空指针,直接返回当前时间。如果t不是空指针,返回当前时间的同时,将返回值赋予t指向的内存空间。
#include<stdlib.h>
#include<stdio.h>
#include<time.h>/*用到了time函数,所以要有这个头文件*/
#define MAX 10
int main(void)
{
int number[MAX] = {0};
int i;
srand((unsigned)time(NULL));/*播种子*/
for(i = 0; i < MAX; i++)
{
number[i] = (rand() % 100);/*产生100以内的随机整数*/
printf("%d\n",number[i]);
}
printf("\n");
return 0;
}
1、是拿当前系统时间作为种子,由于时间是变化的,种子变化,可以产生不相同的随机数。
计算机中的随机数实际上都不是真正的随机数,如果两次给的种子一样,是会生成同样的随机序列的。 所以,一般都会以当前的时间作为种子来生成随机数,这样更加的随机。
2、使用时,参数可以是unsigned型的任意数据,比如srand(10);
3、如果不使用srand,用rand()产生的随机数,在多次运行,结果是一样的。
string类说明使用
sprintf字符串连接说明
sprintf具有字符串连接功能,返回值写入的字符总数,不包括字符串追加在字符串末尾的空字符
eg:
unsigned char buff_index = 0;
unsigned char stream_buff[10 * 1024]
buff_index += sprintf(stream_buff + buff_index, "gao %s", "hello world");