- 博客(8)
- 收藏
- 关注
原创 对于各种指针的理解
在定义指针变量时,用 type + * 的方式 例如: int *p; char *ch; ...说明一点,*和变量名没关系,也可以写成如下风格,单独的p和ch叫做指针变量 int* p; char* ch; ...一个指针只能指向与它类型相同的类型 如下:int a = 0;int *p = &a;char ch = 'A';char *q = &ch;in
2017-12-28 13:30:05 199
原创 可变参数列表
由栈帧结构可知,被调用函数的参数在创建的时候最左边的最后被创建,因此只要知道第一个参数的地址(被调用函数必须有第一个参数),就可以得到其他参数的内容。例如: int fun(int a, ...)a为第一个元素,不可省略, … 代表可变参数列表如图: fun函数的参数部分在调用fun函数的函数和fun函数之间存储,当调用fun函数时,不管传了几个参数,只要将a变量的地址给一个指针变量,这个指针
2017-12-28 13:16:21 362
原创 栈帧与函数调用过程
程序的地址空间程序的地址空间图中,从下向上,地址不断增长,从0x00000000到0xFFFFFFFF。 code:代码区,存储代码 字符、串常量区:存储不能被修改的常量 Init,uninit:全局区,分别为初始化全局区,和未初始化全局区,存储全局变量 heap:堆,使用malloc在堆申请空间,在堆上创建的变量使用完毕后要手动释放空间 栈:在离堆较远处的一块空间叫做栈,用于存放临时变量
2017-12-11 19:58:56 400
原创 递归方式实现打印一个整数的每一位
#include<stdio.h>#include<windows.h>void fun(int n){ if(n>0) { fun(n / 10); printf("%d ", n % 10); }}int main(){ int n = 1234; fun(n); system("pause"); r
2017-12-10 18:58:42 250
原创 用递归实现strlen函数
#include<stdio.h>#include<windows.h>int mystrlen(char *string){ if ((*string) == '\0') { return 0; } else { return 1 + mystrlen(++string); }}int main(){
2017-12-10 18:56:43 916
原创 用递归和非递归分别实现求第n个斐波那契数。
#include<stdio.h>#include<Windows.h>int fib1(const int n)//非递归{ int a = 1; int b = 1; int sum = 0; int i = 0; for (i = 3; i <= n; i++) { sum = a + b; a = b;
2017-12-10 18:52:58 330
原创 在VS中使用scanf()不报错的方法
用过VS的都知道,VS中使用scanf()函数会报错,canf()在读取时不检查边界,所以可能会造成内存泄露,所以VS提供了scanf_s()来替代,在调用时,必须提供给scanf_s一个数字以表明读取多少位字符,用法为scanf_s(“%c”,&letter,sizeof(letter))先看一段代码#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>
2017-12-02 13:01:22 9339 2
原创 C语言—三子棋
使用工具:VS2017代码分为三部分 game.h(函数声明) game.c(实现函数功能) test.c(main函数)棋盘为3*3的矩阵规则: 1.每回合玩家与电脑只能放置一枚棋子 2.已有棋子的位置不能再放置棋子 3.若有一方的三枚棋子可连城一条直线,则胜利 4.若棋盘棋子已经布满,但是双方没有一方胜利,则平局此程序设计的电脑走的方式是产生一个随机值作为坐标,较为简单,可改进,让电脑更
2017-12-02 12:28:32 172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人