C语言
IT_FAVORITE
这个作者很懒,什么都没留下…
展开
-
位操作中的&操作运算符练习
int fun(x) { int count = 0; while(x) { count ++; x = x&(x-1); } return count; } 假定x = 9999。 答案:8将x转化为二进制数10011100001111然后进行按位&运算eg1:原创 2016-06-07 20:29:47 · 303 阅读 · 0 评论 -
浅析指针强转相关知识
一.将char型强转为int型定义一个字符型数组,存放四个字节,字节数同unsigned int 型。 如何将该数组数据转换为unsigned int型数据?char array[4] = {0x11,0x12,0x13,0x14};/*将array强转为unsigned int/unsigned int number = *((unsigned int *)array);printf("T原创 2017-10-14 13:48:37 · 251 阅读 · 0 评论 -
浅析指针的指针
int a = 12;int *b = &a;int **c = &b;代码图析如下,c为指针的指针。 指针b中存放的是a的地址,指针c中存放的是指针b的地址 例: int i = 5,j = 6; int *ip1 = &a,*ip2 = &b; int **ipp = &ip1;输出结果:&i:0x3a73ea1c,&j:0x3a73ea18,ip1:0x3a73ea1c,&原创 2017-07-12 08:48:19 · 294 阅读 · 0 评论 -
图析递归调用的精髓
递归两个重要特性: 1.存在限制性,当符合这个条件时,递归便不再继续 2.每次递归后越来越接近这个限制条件摘自《C和指针》例子:一个无符号整型值,转换为字符串并打印它 #include<stdio.h>void binary_to_ascii(unsigned int value){ unsigned int quotient; quotient = value/10;原创 2017-06-30 09:04:02 · 942 阅读 · 0 评论 -
指针为何不能修改其指向的常量字符串
#include<stdio.h>void trans_string(char *string){ *string = 'm';}void main(){ char string[] = "abcdefg"; trans_string(string); printf("*string:%c,string:%s\n",*string,string); c原创 2017-06-16 08:56:04 · 2489 阅读 · 0 评论 -
链表、队列和栈的区别
链表、队列和栈的区别链表,队列和栈都是数据结构的一种。Sartaj Sahni 在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。一. 链表1.定义 链表(Linked list)是一种常见的基础数据结构,是转载 2016-08-08 17:43:40 · 755 阅读 · 0 评论 -
int型整数和BCD码之间的相互转化
举例说明:假设int型整数为12345678,转化为BCD码后成为了32位的12345678,表示4个字节。#include<stdio.h>typedef unsigned long u32;u32 inttoBCD(int m){ u32 r=0,n=1; int a; while(m) { a=m %10; m=m/10;原创 2016-09-27 10:58:47 · 15356 阅读 · 2 评论 -
将两个字符转化成一个十六进制数
注:以下代码中默认 UINT8 a=‘3’,UINT8 b=‘F’,就不写函数调用了;#include<stdio.h>typedef unsigned char UINT8;typedef unsigned short UINT16;UINT8 transform(UINT8 a,UINT8 b){ UINT8 c; if(a>='0' && a<='9') {原创 2016-09-27 09:56:28 · 2572 阅读 · 1 评论 -
typedef函数指针
typedef int (*MYFUN)(int, int); 这种用法一般用在给函数定义别名的时候 上面的例子定义MYFUN 是一个函数指针, 函数类型是带两个int 参数, 返回一个int在分析这种形式的定义的时候可以用下面的方法: 先去掉typedef 和别名, 剩下的就是原变量的类型. 去掉typedef和MYFUN以后就剩: int (*)(int, int)用法二:typede转载 2016-08-29 16:43:55 · 346 阅读 · 0 评论 -
关于位运算的操作以及不同进制数之间的比较
#include <stdio.h> int main() { long res,bb; char b[10]={0x12,0x34,0x56,0x78}; res=(short)(b[0]<<8|b[1]); bb=(long)(b[0]<<24|b[1]<<16|b[2]<<8|b[3]); printf("%x,%x\n",res,bb); }输出结果:12原创 2016-07-21 11:47:20 · 563 阅读 · 0 评论 -
C语言的非局部跳转:setjmp和longjmp
C语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转(通常情况下,很多人都建议不要使用goto语句,因为采用goto语句后,代码维护工作量加大)。另外,C语言标准中还提供一种非局部跳转“no-local goto”,通过setjmp和longjmp函数来实现。下面我们来看一个简单的例子。 1 #include <stdio.h> 2 #include <setjmp.h> 3 4转载 2016-07-19 20:30:34 · 454 阅读 · 0 评论 -
将十六进制数拆分成两个ASCII码值
将一个十六进制数转化成两个ASCII码值,即两个字符形式。 如0x3F,转化成二进制形式为0011 1111,转化成字符为“3F”,将十六进制转化成两个ASCII码值(字符形式)。#include<stdio.h>typedef unsigned char UINT8;typedef unsigned short UINT16;void transform(UINT8 c){ UIN原创 2016-07-28 18:07:40 · 3727 阅读 · 0 评论 -
字节序大小端
一、字节序定义 字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。 其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。 在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian。引用标准的转载 2016-07-28 16:09:12 · 239 阅读 · 0 评论 -
返回指针值的函数
一个函数返回一个指针型的数据,即地址。 这种返回指针值的函数,一般定义形式为 类型名 * 函数名(参数表列) 例如: int * a(int x,int y) a是函数名,调用它以后能得到一个指向整型数据的指针(地址),x,y是函数a的形参,为整型。a的两侧运算符()的优先级高于,因此a先于()结合。函数前面有一个,表示此函数是指针型函数(函数值是指针)。最前面的int表示返回原创 2016-07-05 13:55:14 · 388 阅读 · 0 评论 -
实例解析二维数组与数组指针
一维数组的值是一个指针常量,它的类型是“指向元素类型的指针”,它指向数组的第1个元素。多维数组的也差不多。唯一的区别就是多维数组的第1维的元素实际上是另一个数组。二维数组介绍二维数组,例如:int matrix[3][10];创建了matrix,它可以看作是一个一维数组,包含3个元素,只是每个元素恰好是包含10个整形元素的数组。 matrix这个名字的值(*matrix)是一个指向它第一个元素的指原创 2017-10-25 22:41:56 · 517 阅读 · 0 评论