![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c
Dean_Deng
这个作者很懒,什么都没留下…
展开
-
C语言typedef
最近看数据结构的书,发现自己C语言的语法不是很好,查资料琢磨了一下数据结构中的typedeftypedef关键字在c语言中用来为已有数据类型创建一个新名字如typedef int DataType;如在一个结构体数据结构中:typedef int DataType;typedef struct snode{DataType data; struct转载 2015-03-12 22:44:39 · 1053 阅读 · 0 评论 -
动态内存和静态内存的比较
动态内存和静态内存的比较:静态内存是由系统自动分配,由系统自动释放。静态内存是在栈分配的的。动态内存是由程序员手动分配的,手动释放动态内存是在堆分配的转载 2015-05-04 11:01:29 · 1092 阅读 · 0 评论 -
C语言指针学习七
*号的用法: ①乘法 ②定义指针变量 int * p; 定义了一个名字叫p的变量,int *表示变量p只能存放整型变量的地址。 ③指针运算符 该运算符放在已经定义好的指针变量的前面: 如果p是一个已经定义好的指针变量,则*p表示以p的内容为地址的变量 ④ 注意:int * p; 和 *p有很大区别: 格式上: int * p;转载 2015-05-01 09:23:51 · 457 阅读 · 0 评论 -
指针学习九
在被调函数函数中使用指针变量为形参的的值可以很容易的修改主调函数中变量的值,也可以达到拿到多个返回值的效果。看下面的例子:#include <stdio.h>void f(int * p, int * q){ *p = 1; *q = 2;}int main(){ int a = 3; int b = 5; f(&a, &b); printf("a =转载 2015-05-01 12:06:38 · 394 阅读 · 0 评论 -
C语言指针学习六
C语言指针学习6下面通过交换两个数的值的例子比较,程序代码在最下面,加深对指针变量的理解 swap1函数①main主函数a的值3,b的值5传递到是swap1, swap1的局部变量p, q虽然在做值3和5 的交换, 可是一旦交换完毕,局部变量p和q所占用的内存空间会释放掉。②主函数main中的a, b仍然没有被改变。swap2函数①main函数中a和b的地址分别传递给p, q. swap转载 2015-04-30 17:41:27 · 500 阅读 · 0 评论 -
取出结构体变量中的每一个成员的两种方式
如何取出结构体中的每一个成员变量:#include <stdio.h>struct Student{ int age; float score; char sex;};int main(void){ struct Student st = {80, 66.6F, 'F'}; struct Student * pst = &st; pst->age转载 2015-05-05 15:21:02 · 13655 阅读 · 0 评论 -
C语言指针学习八
实参与形参的不同#include <stdio.h>void swap(int * p, int * q){ int t; t = *p; *p = *q; *q = *t;}int main(){ int a = 3; int b = 5; swap(&a, &b); printf("a = %d, b = %d\n", a, b);转载 2015-05-01 10:47:25 · 585 阅读 · 0 评论 -
静态变量不能跨函数使用内存
多级指针变量跨函数使用内存先看一个程序小例子:#include <stdio.h>void f(int ** q){ int i = 5; //q的值存放的是p的地址,即q = &p //所以*q就相当于p //所以*q = &i相当于p = &i //最终在main函数中*p就拿到了i的值5 *q = &i;}int main(){ int *转载 2015-05-05 09:46:16 · 1220 阅读 · 0 评论 -
结构体变量的初始化和赋值
下面是一段结构体变量初始化和赋值的小程序:#include <stdio.h>struct Student{ int age; float score; char sex;};int main(void){ //定义并赋值称之为初始化 struct Student st1 = {80, 66.0F, 'F'}; //定义声明结构体变量st2,转载 2015-05-05 14:44:45 · 4136 阅读 · 0 评论 -
动态变量可以跨函数使用内存
由上节的知识我们直到静态变量是不可以跨函数使用内存的: 那么由malloc函数动分配分配内存的变量可以跨函数使用内存吗? 先来看一段小程序:#include <stdio.h>#include <malloc.h>void f(int ** q){ *q = (int *)malloc(sizeof(int)); **q = 5;}int main(){ int转载 2015-05-05 10:52:46 · 1290 阅读 · 0 评论 -
定义结构体的三种方式
定义结构体的三种方式: //定义结构体的第一种方式struct Student{ int age; float score; char sex;};//定义结构体的第二种方式struct Student{ int age; float score; char sex;}st;//定义结构体的第三种方式struct{ int age;转载 2015-05-05 11:58:50 · 4278 阅读 · 0 评论 -
通过函数完成对结构体变量的输入与输出
先看一个小程序:#include <stdio.h>#include <string.h>struct Student{ int age; char name[100]; char sex;};//声明输入输出函数void InputStudent(struct Student * pst);void OutputStudent(struct Student s转载 2015-05-06 11:23:25 · 7674 阅读 · 0 评论 -
数组与指针
#include <stdio.h>int main(){ //a是数组名,5是数组元素的个数, //所有元素就是a[0]~a[4] int a[5]; //3行4列, //b[0][0]是第一个元素, //b[i][j]是第i+1行,第j+1列元素 int b[3][4]; return 0;} 数组a在内存中的5个连续的存储单元a[0]转载 2015-05-01 13:23:28 · 459 阅读 · 0 评论 -
利用结构体输入学生信息并按分数排序后输出
#include <stdio.h>#include <malloc.h>struct Student{ int age; float score; char name[100];};int main(void){ struct Student * pst; int i, j; int len; printf("请输入学生的个数len转载 2015-05-06 20:09:08 · 13047 阅读 · 1 评论 -
补码相关知识学习
原码: 也叫符号-绝对值码 最高位0表示正,1表示负, 其余二进制是该数字的绝对值的二进制位 如十进制的负5二进制的原码为1101原码的特点: 原码简单易懂 加减运算复杂 存在加减乘除四种运算,增加了CPU的复杂度 零的表示不唯一(1000和0000都可以表示零)反码: 如同原码运算不方转载 2015-05-07 16:10:03 · 713 阅读 · 0 评论 -
C语言多级指针
先看一个小程序:#include <stdio.h>int main(){ int i = 10; int * p = &i; int ** q = &p; int *** r = &q; //p指向了i变量,p中存储的是i的地址 printf("i变量本身的地址:%#X\n", p); //由于p是int *类型,如果把int *看成一般转载 2015-05-04 11:51:20 · 903 阅读 · 0 评论 -
不要过早的释放动态内存空间
先看一个程序:#include <stdio.h>#include <malloc.h>void f(int * q){ *q = 200; //free(q);//错误过早释放动态内存空间}int main(){ int * p = (int *)malloc(sizeof(int)); *p = 10; printf("%d\n", p); f(p转载 2015-05-03 11:36:31 · 635 阅读 · 0 评论 -
C语言指针学习三
因为指针和地址操作有关,先从地址总线说起。上节提到计算机CPU操作内存中的数据具体操作控制哪个内存单元是由地址总线控制。CPU和内存条之间一般有32根地址总线每根地址总线最懂控制的内存单元数量为2的1次方(这是由一根地址总线的物理状态就两种情况决定的:0和1)32跟地址总线就控制了2的32次方个内存单元。每个内存单元又是8个比特位,实际上32根地址总线控制的内存就是2的转载 2015-04-30 14:05:19 · 716 阅读 · 0 评论 -
指针变量与函数指针形参
c语言中指针是一种保存变量地址的变量。指针变量举例:int x = 1, y=2;int *p; /*p是指向int类型的指针*/p = &x; /*p现指向x*/y = *p /*y的值现为1*//*编写代码时要注意,你可能觉得自己只是在修改*p变量的值,但你忘了p中存了x变量的地址, 修改*p的值相当于修改了p指向的变量的值*/*p = 0转载 2015-03-14 09:36:45 · 755 阅读 · 0 评论 -
堆排序创建初始堆
最终结果如图1-1(e):转载 2015-04-01 07:49:17 · 34442 阅读 · 1 评论 -
c语言数组
c语言数组名字作为函数的形参,传递的是数组中第一个元素在内存中的地址。求数组长度可以使用sizeof(数组名子)/sizeof(数组基本类型)如: int a[]={64,5,7,89,6,24}; int len = sizeof(a)/sizeof(int);但是对于字符数组要小心因为字符数组最后一个字符默认存储'\n'char c[]={'A','B',"转载 2015-03-24 21:35:51 · 758 阅读 · 0 评论 -
堆排序算法代码实现
对排序算法的核心思想是:把一个数组按照完全二叉树创建好最大堆以后,拿堆顶元素和最后一个元素(堆完全二叉树顺序存储(是个数组)\的最后一个元素)交换以后,对于这个新的数组,除去最后面那个最大的元素(原先的堆顶元素)的序列再次调整成最大堆。如此反复交换最大堆堆顶元素,调整剩余子序列到最大堆。直到最后子序列就剩下一个元素的时候,排序也就完成了。我们就得到了这个数组从小到大的排列结果。转载 2015-04-02 23:04:59 · 1751 阅读 · 0 评论 -
希尔排序
希尔排序是在插入排序的基础上进行的。主要思想是将排序的元素按照一定步长进行分组,对每组中的元素按步长进行插入排序,进行完第一次各组排序后的结果再比上次小的步长,再分组,再各组逐次排序,再得到排序结果..., 直到这个步长变为1的时候,其实就是真正的插入排序。这次完全按照插入排序算法对所有元素排序。得到结果后。整个排序结束。先是分组12个元素,元素个数/2=6,所以第一次分组步长为6,分得6转载 2015-04-04 19:37:12 · 567 阅读 · 0 评论 -
二分查找
二分查找有个前提,是待查找的序列或数组必须是一个有序的的序列或数组,否则二分查找算法就毫无意义,或者说根本就没法查了。(如果别人给你一个无序的数组,就让你用二分查找算法实现一下查找,千万别上来抄起笔傻兮兮的写代码,这是一面试过程的陷进,你的先用你学过的排序算法,对别人给你的无序数组从小到大排个序,在用二分查找去找)二分查找的思想:在一个有序的数组或序列中先找出数组的中间元素和待查找元素转载 2015-04-11 20:43:04 · 567 阅读 · 0 评论 -
mingw gcc编译器
http://download.csdn.net/detail/dean_deng/8588195解压完MinGW.7z文件后,配置完环境变量,编写一个c/c++程序hello.c/hello.cpp原代码,cmd进入windows命令行后,cd进入到当前hello.c或hello.cpp源代码所在路劲下,使用下面的命令:gcc -g hello.c -o hello 编译hello.转载 2015-04-12 22:07:09 · 701 阅读 · 0 评论 -
冒泡排序
#include void PrintArray(int a[], int arr_len){ int i; for(i=0;i { printf("%d ",a[i]); }}void BubbleSort(int a[], int arr_len){ int i,j,temp; for(i转载 2015-04-05 23:24:27 · 521 阅读 · 0 评论 -
快速排序代码实现
快速排序代码实现:#include void PrintArray(int a[], int arr_len){ int i; for(i=1;i { printf("%d ",a[i]); } printf("\n");}void swap(int a[], int low, int high){转载 2015-04-09 08:37:22 · 543 阅读 · 0 评论 -
快速排序一轮的代码实现
#include #include void PrintArray(int a[], int arr_len){ int i; for(i=1;i { printf("%d ",a[i]); } printf("\n");}void swap(int a[], int low, int high){转载 2015-04-08 23:22:36 · 946 阅读 · 1 评论 -
C语言sizeof函数和指针变量所占字节数
一个指针变量到底占几个字节?一些预备知识: 首先看一个c语言自带的函数sizeof: sizeof(数据类型) 功能:返回值就是该数据类型所占的字节数例子: sizeof(int) = 4; sizeof(char) = 1; sizeof(double) = 8; 还可以写成sizeof(变量名),返回值是该变量所占的字节数转载 2015-05-02 12:09:48 · 8060 阅读 · 0 评论 -
C语言指针学习一
一、指针是什么?指针就是地址。二、地址是什么?地址就是内存单元的编号。三、什么是内存单元的编号?操作系统的内存可以字节为单位进行划分,划分出来的这样的一个个内存单元,每一个内存单元都有一个编号。(注意内存单元不是以位进行划分,是以字节进行划分。一个字节可以分为8位,这8位上是0(或1)。)转载 2015-04-30 08:49:56 · 524 阅读 · 0 评论 -
C语言指针变量学习四
地址: 内存单元的编号。 从零开始的非负整数。 范围:4G(0-4G-1)指针: 指针就是地址,地址就是指针。 指针变量就是存放内存单元编号的变量。 指针的本质就是一个操作受限的非负整数: 所谓非负整数,指的就是这个内转载 2015-04-30 14:39:05 · 482 阅读 · 0 评论 -
C语言指针变量学习五
//下面的程序演示了指针没有被人为手动分配存储空间的错误#include int main(){ int * p; int i = 5; *p = i; printf("*p=%d\n", *p); return 0;}指针变量一开始没有在程序中控制去分配内存单元,会导致,编译器自动分配一个临时的内存单元给p,这个内存单元是不被控转载 2015-04-30 14:57:48 · 556 阅读 · 0 评论 -
C语言指针学习二
指针的重要性: ①指针的可以表示一些复杂的数据结构: 比如链表,树(如家谱,操作文件夹父目录与子目录),图(如告诉你你几个城市点,求出最短路径),..., 以我个人的学习经历来讲,C语言指针没学好,数据结构基本上不要考虑学了,因为市面上大多数教材都是C为主, 而这些复杂的数据结构的链式存储以指针为主。你可能根本就看不懂人家的伪代码,跟别谈自转载 2015-04-30 11:35:00 · 711 阅读 · 0 评论 -
C语言动态分配内存知识
数组的长度必须事先指定,只能是常整数,不能是变量 传统形式定义的数组,该数组的内存程序员无法手动释放,只能在定义>该数组的函数使用完毕后,释放数组占用的内存。 数组的长度一旦定义,其长度就不能更改。 传统形式定义的数组不能跨函数使用。 动态内存分配可以很好的解决传统数组的缺点。 传统数组也被称之为静态数组。 malloc函数介绍: malloc是memory转载 2015-07-12 10:23:39 · 731 阅读 · 0 评论