![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
xsunrise
这个作者很懒,什么都没留下…
展开
-
x = x & ~077 与 x = x & 0177700 都将 x 后六位置 0,但可移植性不同,建议采用将高位为0的数取反的方式
x = x & ~077 与 x = x & 0177700 都将 x 后六位置 0,x & ~077与机器字长无关,可移植性强,而且没有额外的开销;而 x & 0177700将 x 假定为16位长度的数值,当机器不同导致变量 x 的长度改变时,结果不同,不具有可移植性。转载 2015-04-06 16:29:39 · 1841 阅读 · 1 评论 -
【转】深入 char * ,char ** ,char a[ ] ,char *a[]
C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个。。。下面就开始剖析一下这两位的恩怨情仇。。。 1 数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。。 2 指针。转载 2015-05-23 22:03:33 · 506 阅读 · 0 评论 -
判断大端小端存储的方法
int型数据给出的地址是数据的起始地址内存地址从左向右,从上到下增大,左上方是低位地址数据是从低位向高位存储的,所以数据的起始地址是低位地址1. 通过指针类型强制转换并对整型数据首字节赋值,判断该赋值赋给了高位还是低位typedef unsigned char BYTE;int main(int argc, char* argv[]){ unsigned int原创 2015-06-05 19:19:42 · 542 阅读 · 0 评论 -
【转】char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][], and so
http://blog.163.com/digoal@126/blog/static/163877040201271195312138/本文测试环境 : X86-64 bit 架构的服务器CentOS x64 5.xgcc version 4.1.2 20080704指针和数组是C的比较难搞懂的知识点, 需要结合内存来学习, 非常感谢各位转载 2015-05-24 01:12:15 · 465 阅读 · 0 评论 -
C语言中的随机数 srand ( ) 和 rand ( )
在C语言中,生成一个随机数,一般利用两个函数,即void srand ( unsigned int seed ) 和 int rand ( void )。其中,srand函数用于生成一个随机数种子,种子的值等于参数seed,这个参数由我们指定一个数、式子或者函数值,rand函数根据这个随机数种子进行运算生成一个[ 0 , RAND_MAX (int或 unsigned int最大值) ]范围内原创 2015-04-04 18:34:06 · 16424 阅读 · 1 评论 -
防止VC调用chkstk函数
微软的C\C++编译器总是非常的弱智,不但随便乱插运行时函数,还随便加进乱七八糟的引用,导致程序难以通用。例如__chkstk函数,只要你使用8120字节以上的局部变量,他就会偷偷调用(CALL)该函数, 例如 int Data[8192];int *P=(int*)&Data;for(int I=0;I{*P=(int)I;} 反汇编结果,在进行for循环之前,他转载 2015-06-09 19:16:14 · 4483 阅读 · 0 评论 -
【汇总】scanf、getchar、getch、getche、getc、fgetc、gets、fgets、getline
1.scanf函数 原型:int scanf(char *format,...]); 参数:format 用 restrict 修饰。format 指向的控制串由以下三类字符组成: 格式说明符:%加转换字符 空白符:空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。空白符可以是空格原创 2015-04-12 12:08:12 · 1659 阅读 · 0 评论 -
【精华】指针释疑
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)int **ptr; (4)int转载 2015-06-11 19:31:00 · 444 阅读 · 0 评论 -
将指针强制类型转换为函数指针
尽管函数不是变量,但它在内存中仍有其物理地址,该地址能够赋给指针变量。获取函数地址的方法是:用不带有括号和参数的函数名得到。函数名相当于一个指向其函数入口指针常量。 那么既然函数名是一个指针常量,那么就可以对其进行一些相应的处理,如强制类型转换。那么我们就可以把这个地址放在一个整形指针数组中,然后作为函数指针调用即可。强制类型转换的方法如下所示:(参考自http://blog.ch原创 2015-06-11 21:34:20 · 6685 阅读 · 1 评论 -
函数指针的强制转换用法
http://blog.chinaunix.net/uid-20459533-id-1944392.html2004年7月的一天,在电子BBS讨论区上溜达,看到一个有趣的帖子,整个帖子内容如下: 纯C51复位功能函数:一个大三学生,让人又爱又怕 现单列复位部分如下:main() { unsigned char code rst[]={0xe4,0xc0,0xe0,0转载 2015-06-11 21:36:55 · 2186 阅读 · 0 评论 -
const char*, char const*, char*const的区别
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 事实上这个概念谁都有,只是三种声明方式非常相似很容易记混。 Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读。 char * const cp; ( * 读成 pointer to转载 2015-06-15 11:04:50 · 387 阅读 · 0 评论 -
【未完成】fseek后文件指针中_ptr回到文件头:文件指针(FILE *fp)的定义与文件输入缓冲区
今天写有关文件操作的程序,要从文本文件中统计某个单词的词频,于是想先写一个从已经打开的文件中获取一个单词的函数,如下:/* 从文件流中读取一个单词保存到word中,并返回单词的长度 */int fget_word(FILE原创 2015-06-16 00:06:00 · 1810 阅读 · 2 评论 -
linux环境C编程与windows的不同
1.system("pause")不能使用,可自己写一个mypause()函数#include #include void mypause(){ char ch; printf("Press Enter to continue...\n"); __fpurge(stdin); while((ch = getchar())!='\n' && ch !原创 2015-06-25 22:18:17 · 988 阅读 · 0 评论 -
【精华】关于C中的输入输出缓冲-buffering in standard streams
英文解释buffering in standard streams http://www.pixelbeat.org/programming/stdio_buffering/键盘缓冲--- 键盘Bios 和键盘管理---操作系统启动后操作系统接管操作系统把各种设备看成文件DOS ,Windows, Unix ,把键盘,显示器,鼠标等称为终端;而键盘,显示器组合称为转载 2015-04-13 22:08:33 · 546 阅读 · 0 评论 -
希尔排序——《C programming language》
/* shellsort : sort v[0]...v[n-1] into increase order */void shellsort(int v[], int n){ int gap, i, j, temp; for (gap = n / 2; gap > 0; gap /= 2) { for (i = gap; i < n; i++)转载 2015-04-16 18:37:48 · 480 阅读 · 0 评论 -
将变量x声明为unsigned类型,可以保证右移时无论程序在什么机器上运行,左边空位都由0填补
左移时由 0 补低位空位,右移时无符号数unsigned由 0 补高位空位,有符号数signed根据机器不同补符号位或者补0。int默认是有符号的,将变量x声明为unsigned类型,可以保证右移时无论程序在什么机器上运行,左边空位都由0填补。原创 2015-04-09 17:35:55 · 434 阅读 · 0 评论 -
表达式 x &= ( x - 1) 可以将x最右边值为1的二进制位置0
表达式 x &= ( x - 1) 可以将x最右边值为1的二进制位置0转载 2015-04-09 21:42:45 · 448 阅读 · 0 评论 -
一元运算符 + 表示正号 - 表示负号
一元运算符包括 + - sizeof() ! ~ ++ --其中 + 表示正号; - 表示负号原创 2015-04-09 22:05:01 · 2434 阅读 · 0 评论 -
注意:C语言中没有指定同一运算符的多个操作数或者某函数各个参数的求值顺序,如果代码的执行结果和求值顺序有关,都是不好的程序设计风格。
注意:C语言中没有指定同一运算符的多个操作数的计算顺序,也没有指定某函数各个参数的求值顺序。 如: x = f() + g () 可以先计算 f(),也可以先计算 g(),如果 f 或者 g会改变另一函数所使用的变量的值,也就是说 x 的结果可能会依赖于这两个函数的计算顺序,这时,为了保证要求的顺序,应该将中间结果保存在临时变量中。 同理,printf("%d %d\n",转载 2015-04-09 22:49:55 · 1264 阅读 · 0 评论 -
C知识回顾(《C程序设计语言 The C Programming Language》)
1.单引号中的字符表示一个整形值,我们称为字符常量。例如,'\n'是单个字符,"\n"是只包含一个字符的字符串常量。原创 2015-02-22 21:11:39 · 1090 阅读 · 0 评论 -
函数中的数组参数
在c和c++中,数组作为函数的参数,要掌握以下几点:1.数组作为参数时,退化为指针数组参数不是按值传递,它是传递第一个元素(准确地说是第0个)的指针(即数组被传递为指针)。例如,如下声明:void putValues(int[10]); 被编译器视为:void putValues(int*);C/C++数组参数的长度与参数声明无关。因此,下列三个声明是等价的:void pu转载 2015-05-13 17:57:59 · 948 阅读 · 0 评论 -
char *和char[]的初始化
昨晚上随便尝试写了下一个简单的reverse函数,就是颠倒字符的顺序,结果出现问题.研究了半天,大致是关于char* 和char[]初始化的.char* str1 = "abcd";char str2[] = "abcd";void reverse(char * input, int len){ ...}在调用reverse函数时. 从形式上 reverse转载 2015-05-13 21:56:48 · 882 阅读 · 0 评论 -
一个利用简单迭代方法求方程cos(x)-x=0的一个实根的程序
/*编写函数fun,它的功能是:利用以下的简单迭代方法求方程cos(x)-x=0的一个实根。迭代步骤如下:(1)取x1初值为0.0; (2)x0=x1,把x1的值赋给x0;(3)x1=cos(x0),求出一个新的x1;(4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。程序将输出roo原创 2015-05-16 19:46:58 · 15231 阅读 · 1 评论 -
子函数参数名与全局变量参数名相同 使全局变量在子函数中失效 #define 宏定义的值在子函数里变为0
上面的是正确的代码,一开始子函数的参数写的是int fun(struct student s[], struct student h[])数组h[]输出总出错,发现是子函数的for循环进不去,添加printf("%d", MAX)发现主函数中MAX为 6 正确,而子函数中 MAX为 0 是错误的,这时将#define MAX sizeof(s)/sizeof(s[0]) 改为#define M原创 2015-05-21 22:12:00 · 1356 阅读 · 0 评论 -
linux中c/c++数组的最大长度
由于栈空间大小有限,默认为8M,可空过ulimit -a命令查看,linux中数组的大小不能超过8M(实际会比理论值稍微小一点),对于char数组就是长度小于8*1024*1024,对于int数组是长度小于2*1024*1024。这时可以采用堆空间的方式解决,string的最大长度可通过string.max_size()查看,一般32位下为2的32次方。原创 2015-10-30 17:53:27 · 3597 阅读 · 0 评论