
c/c++语言知识
文章平均质量分 63
ali94s
对c c++感兴趣正在学习这些语言
展开
-
c语言中统计二进制位中1的个数的算法优化
统计整数二进制位中1的个数的办法:int one(int m){ int count = 0; while (m != 0) { if (m % 2 == 1) //进行模2除2一位一位的统计 { count++; } m /= 2; }}或者下面这种位于运算的int two(int m){ int count = 0; whi原创 2015-12-08 15:49:28 · 430 阅读 · 0 评论 -
通过转移表练习函数指针的使用
通过了解指针我们直到了一些常规类型的指针int a=1; //整形变量char b='1'; //字符型变量int *p1=&a; //指向整形指针char *p2=&b; //指向字符型的指针....p1是一个指向整形的指针,p2是一个指向字符型的指针,同样我们也接触了一些高级的指针int **pp=&p1; //二级指针 pp是指向指针的指针int (*p3)[10]原创 2015-12-06 23:29:51 · 445 阅读 · 0 评论 -
自己实现的字符串操作函数
/*自己编写实现字符串相关的函数包括四个基础的字符串操作函数strlen()、strcpy()、strcmp()、strcat()以及扩展的strstr()还有两个操作内存的memcpy()、memmove()*/#define _CRT_SECURE_NO_WARNINGS#include#include#include/*求字符串长度的函数*/int my_strlen1(con原创 2015-12-02 10:55:51 · 420 阅读 · 0 评论 -
字符串拷贝的一系列问题
对于字符串处理的函数有很多,这里我们只讨论拷贝的函数首先我们来看一下strcpy()函数#include#include#includechar *my_strcpy(char *dst, const char *src){ assert(dst && src); char *ret = dst; while (*dst++ = *src++) ; return ret原创 2015-11-30 22:29:08 · 900 阅读 · 1 评论 -
简单实现printf函数
使用可变参数列表简单实现printf函数代码如下:my_print.h/*******************头文件*******************/#ifndef __PRINT_H__#define __PRINT_H__#define _CRT_SECURE_NO_WARNINGS#include#include#i原创 2015-11-27 12:40:59 · 566 阅读 · 0 评论 -
你不知道的宏作用
写程序的时候都会接触到宏这个概念。#define非常常见的一种写法#include#define MAX 1000int main(){int arr[MAX];...return 0;}这里我们定义了一个数组arr它的最大长度是我们宏定义的MAX,所以我们以后再想修改这个最大值的时候只需要在宏定义出修改就可以看,在main函数使用MAX,这样对于程序的修改原创 2015-11-23 11:13:04 · 517 阅读 · 0 评论 -
递归函数其实不难理解
递归函数就是直接或者间接的调用自己本身。比如:#include#includevoid fun(){ fun(); //调用自己}int main(){ fun(); system("pause"); return 0;}但是这个程序运行起来后会怎样呢?这就是因为刚刚使用的递归不能停止调用自己本身,每次在调用的时候在栈上都要开辟空间,作为函数运行时堆栈原创 2015-11-22 21:54:34 · 2912 阅读 · 0 评论 -
浅谈C语言的存储区
C语言中存储区大体上分为三个 静态存储区: 静态存储区是用来存储静态变量和全局变量或者常量字符串的位置,在代码中声明一个全局变量,则必须在所有代码块之外声明,它的生命周期从代码开始执行到结束;若在声明一个变量的时候在前面加上static关键字,则说明该变量是个静态变量,他的生命周期是从声明开始到代码运行结束;还有一种存储在静态区的常量,称为字符串常量,如果定义了一个字符串原创 2015-11-20 20:32:48 · 1378 阅读 · 1 评论 -
C语言中static关键字的神奇之处
首先介绍static关键字static翻译成汉语是:静止的; 静电的; 不变的; 正如意思原创 2015-11-21 22:10:30 · 449 阅读 · 0 评论 -
大小端存储的理解
在计算机内存中的数据存储的都是机器二进制序列,在学习c/c++语言的时候会定义到一些变量,比如int(整形)、char(字符型).....但是在计算机中是怎样存储的呢?计算机的内存地址是有高低之分的,那么一个整形数在内存中占有四个字节它又是怎样存储的呢?是低位放在低地址,还是低位放在高地址?在这里我们可以通过一个小小的c程序来进行验证一下:#include#includeint main(原创 2015-12-08 15:49:03 · 445 阅读 · 0 评论 -
c语言中递归函数真的好吗?
递归函数就是直接或者间接的调用自己本身的函数。接触递归的时候我们经常会看到这个程序#include#includelong factorial(int n){ if (n <= 0) return 1; else return n*factorial(n - 1);}int main(){ int n = 5; printf("%ld\n", factorial(n原创 2015-12-08 15:49:21 · 683 阅读 · 0 评论 -
break和continue语句
在c语言中使用循环是非常常见的,有时候我们会想要提前结束循环,或者循环执行满足(或者不满足)某个条件时接下来的语句我们并不想让它执行,这个时候我们会经常使用到break和continue两个语句。这两个语句在循环中有着很重要的作用。break语句:假设我们要设置一个死循环模拟两个人对弈的过程while(1){ ... //假设是两个人在对弈 ...原创 2015-12-08 15:49:18 · 436 阅读 · 0 评论 -
c语言中对可变参数列表的简单理解
函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现。可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中。头文件中声明了一个va_list类型和va_start、va_arg、va_end三个宏。我们使用可变参数列表的时候需要声明一个va_list类型的变量配合这三个宏使用。va_start(va_list变原创 2015-12-08 15:49:24 · 588 阅读 · 0 评论 -
c语言最强大之处--指针
指针是与地址分不开的,提到指针就应该想到地址,因为在c语言中指针变量所存放的值就是一个地址,通过这个值它可以指向这个地址的内存位置,也就可以通过这个指针变量来访问这个内存位置的内容。定义一个指针变量的方法和其他变量是一样的:int *a;char *b;... 这里指针变量a是指向整形的指针,其中a的值是所指向的整形空间的四个字节的第一个字节的地址;b是指向字符型的指针,b的值是这个字符的地址。对原创 2015-12-08 15:49:32 · 796 阅读 · 0 评论 -
字符串操作函数的编写
size_t my_strlen(char const *string)//字符串长度{ assert(string != NULL); size_t count = 0; while (*string++ != '\0') count++; return count;}char *my_strcpy(char *dst, char const *src){原创 2015-12-08 15:49:36 · 389 阅读 · 0 评论 -
c语言中的字节对齐
一、什么是字节对齐?计算机中的数据在存储时并不是按顺序存储,因为在访问特定的数据类型时通常从特定的内存地址开始,所以数据在存储时特定的类型存储时从特定的地址开始,比如我们所说的int类型的对齐数是4,意思是存储这个int类型的变量的地址%4==0,这就是对齐数为4的意思。二、为什么要字节对齐?字节对齐是的思想就是以空间换取时间。所以在存储数据时采取字节对齐的方式,可以让cpu在访存读取原创 2015-12-14 18:52:12 · 574 阅读 · 0 评论 -
通过冒泡排序的快速排序练习使用回调函数
首先什么是回调函数?回调函数是什么?函数指针作为调用函数的参数,通过这个指针可以回调这个指针指向的函数,这样的技巧就是利用回调函数,回调函数就是这个指针指向的函数。一个简单的例子:#include#includevoid fun(){ printf("hello ");}void pfun(void (*p)()) //函数的参数是一个函数指针(是一个地址){原创 2015-12-08 17:56:50 · 443 阅读 · 0 评论 -
c语言怎么会有这么多的作用域?
首先作用域是什么? 顾名思义作用域就是一个东西能起作用的范围,当然这个解释未免有些太过于笼统,在c语言中作用域就是指声明一个变量,而这个变量能被访问的这个区域就是它的作用域。这个变量的被访问的区域由着个变量的标识符的作用域所决定。标识符的作用域就是程序中该标识符可以被使用的区域。c语言的编译器可以大体的分出四个作用域 分别是:文件作用域、函数作用域、代码块作用域、原型作用域。代码块作用原创 2015-12-08 15:49:07 · 441 阅读 · 0 评论 -
gets()函数和puts()函数的渊源关系
对于字符串的处理函数gets()和puts()的结束标志有必要讨论一下gets()函数是从标准输入设备读取字符串直到换行符结束,但是换行符会被丢弃,并且在末尾加上一个字符串结束标志 '\0' ,而与其相对应的puts()函数是将从标准输入设备输入的字符串打印到屏幕上,但是在打印的时候它会做一件事情就是将刚刚输入时所得到 '\0'自动转换成换行符,就是在输出字符串后自动换行。一个简单的应用:#i原创 2015-12-08 15:49:11 · 463 阅读 · 0 评论 -
一个简单的三子棋游戏(c语言实现)
题目是:在一个3*3大小的矩阵中下棋一方有连续三个子便获胜代码如下:#include#include#include char arr[3][3] = { 0 }; //直接定义外部变量所有的函数可以直接使用 因为考虑到棋盘大小是固定的int size = 9; //棋盘大小固定 每下一个子都会使可原创 2015-12-08 15:49:14 · 542 阅读 · 0 评论 -
杨氏矩阵算法
在一个二维数组中,每行都按照从左到右的递增的顺序排序。每列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数。例如:二维数组1 2 34 5 67 9 10查找数字7.看到这道题的话首先会想到遍历整个数组与要找的数子进行比较然后得出结果所以会写出如下的代码:#include#include#define ROW原创 2015-11-21 23:16:06 · 583 阅读 · 0 评论