0%

内存的区域

在计算机中,内存可以被粗略的划分成,代码段、数据段、堆区以及栈区,

阅读全文 »

第一题

1
2
3
4
5
6
7
8
9
#include<stdio.h>

int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int* ptr = (int*)(&a + 1);
printf("%d,%d", *(a + 1), *(ptr - 1));
return 0;
}

上面这道题中,* (a + 1)即相当于a[ 1 ],此时a即为首地址元素
\&a则取到一个类型为inr( * )[5]的指针,此时再用(int*)强制转化成int *指针所以此时指针 ptr 指向数组a最后一个元素之后的一个int类型元素的地址。在输出的时候,解引用(a+1)即为a[1] = 2,解引用(ptr-1)即为a[4]=5。

阅读全文 »

strlen和sizeof本身的区别

szieof是一个运算操作符,在使用时无需声明头文件,它的参数可以是数据类型,数组,指针及函数等等
strlen是一个库函数,在使用前需要声明string.h头文件,它的参数必须是字符型指针(char* )

阅读全文 »

大小端字节序

小端:数字的低位存到内存的低地址上。
大端:数字的低位存到内存的高地址上。
_大端字节序符合平时直觉,一台机器大端还是小端,取决于CPU_

阅读全文 »

什么是函数?

在C语言中,函数又可以被称为 “子程序”,它是一个大程序的某一个部分,由一个或多个语句块构成,负责完成某项特定任务,而且相较于其他代码,其具备相对独立性,可以用它来实现代码的模块化。

阅读全文 »

首先我们需要分析扫雷游戏

在微软的扫雷游戏中,开始游戏后,雷已经随机埋好,当鼠标点击一个待排查点,假如是雷,则游戏结束,假如不是雷,则会显示周围一圈格子中雷的数量。实际上游戏的机制非常简单,但需要实现,还是得仔细分析。

  1. 需要两个数组(字符数组),一个用以存放雷的位置,一个用以向用户显示当前游戏状态,为了方便检测游戏中四条边的雷的数量,这里应将实际数组扩大一圈,比如游戏中看到的是8x8的格子,而在其内部应有一个10x10的二维数组来存放这些信息(通俗来讲就是扩大了一圈)。
  2. 利用srand函数和rand函数来生成随机坐标用以埋雷。用字符 ‘0’ 表示该地方没有雷,用字符 ‘1’ 来表示改地方有雷,最终给玩家显示的是一个由字符 ’ * ’ 组成的格子,当输入坐标时,若此地方有雷,游戏结束,没有雷则显示附近一圈的雷的数量。
  3. 用 ‘0’ ‘1’ 字符来贮存雷的原因是他们两个的ascii码值恰好差1,在计算当前格子周围有几个雷的时候,仅需将周围八个格子之和减去八乘以当前格子再加上字符 ‘0 ’即可。
  4. 两个二维字符数组一一对应!!
阅读全文 »

这是我作为一个初学者第一次尝试搞出来的东西,它不但可以实现三子棋游戏,通过修改#define的定义,还可以实现N子棋游戏。

首先,分析该游戏需要的逻辑

阅读全文 »

关键字

对于关键字这一方面,有以下几个需要我特别注意的

关键字 作用
typedef 类型定义,可理解为类型重命名
static 1.修饰局部变量改变其生命周期(作用域不变)2.修饰全局变量改变作用域,连接属性由外转内 3.修饰函数,同全局变量类似
#define 定义常量和宏
阅读全文 »