
c语言
就呆在云上
自信人生二百年会当水击三千里
展开
-
C/C++ 字节序/位域(Bit-fields)之我见
前言很早想说说这个问题了,经常也会有很多公司拿位域出来考人,呵呵要真的想弄清楚还要一点点的分析。这里先看看网宿的一道笔试题目,这道题目我之前是复制网上的,结果不对,修改了一下,可以正确运行了,谢谢(imafish_i )提醒://假设硬件平台是intel x86(little endian) typedef unsigned int uint32_t; void inet_ntoa(uin原创 2008-12-24 21:36:00 · 25329 阅读 · 27 评论 -
no 浮躁
1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想 出来再参考别人的提示,你就知道自己和别人思路的差异。 2.初学者请不要看太多太多的书那会误人子弟的,先找本系统的学,很多人用了很久 都是只对部分功能熟悉而已,不系统还是不够的。 3.看帮助,不要因为很难而自己是初学者所以就不看;帮助永远是最好的参考手册, 虽然帮助的文字有时候很难看懂,总觉得不够直观。 4.不要转载 2007-12-05 09:45:00 · 1267 阅读 · 1 评论 -
c语言中宏和函数的一点微妙关系
今天在论坛看了一个问题,平时注意的也不多,再看看:#include #define SQUARE(X) X*X int square(int x) { printf("x=%d/n", x); return x*x; } int main() { int m=10; printf("%d,%d,%d/n",square(++m),SQUARE(原创 2008-02-22 12:54:00 · 2116 阅读 · 2 评论 -
Linux下面安装最新的gcc4.2.2
<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm }-->Linux下面安装最新的gcc4.2.2很简单的,首先,现在最新的包GCC 4.2.bz2,一般的到处都有的下,linux下的下载速度很满,20多k,很恶心,我喜欢迅雷的下载速度,在windows下下载,大概42M,下载速度原创 2008-01-30 09:56:00 · 4368 阅读 · 3 评论 -
整型升级&&寻常算术转换
ANSI C中的整型升级char,short int或者int型位段(bit-field),包括它们的有符号或无符号变型,以及枚举类型,可以使用在需要int或unsigned int的表达式中,如果int可以完整地表示源类型的所有值,那么该类型的值就转换为int,否则转换为unsigned int。ANSI C中的寻常算术转换当执行算术运算时,操作数的类型如果不同,就会发生转换。数据类型一般朝着浮原创 2007-11-07 09:08:00 · 1386 阅读 · 0 评论 -
堆、栈及静态数据区详解
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量转载 2007-11-08 14:57:00 · 2429 阅读 · 1 评论 -
内存分配 知识,全局,局部,静态变量
预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局转载 2007-11-08 14:53:00 · 1543 阅读 · 0 评论 -
面试题:把字符串“I am a student”反转成为“student a am I”,不借助任何库函数。
rt:把字符串“I am a student”反转成为“student a am I”,不借助任何库函数,以及把整个字符串逆序。 // fanzhuan.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include int length(char *str) { int leng = 0; while (*str++原创 2007-11-08 13:42:00 · 7640 阅读 · 1 评论 -
数组会越界,但是指针不会……
rt:但是越界的时候指针只能读,而不可以写,具体看看这个程序就一目了然了!// e[i].cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ char *a = "addf"; char h = a[60]; co原创 2007-11-06 19:28:00 · 1514 阅读 · 0 评论 -
面试题:不用第三变量交换ab值
常规的就是加减法,这里给出另外一种方法,就是异或法! #include using namespace std; void exchange1(int &a, int &b);void exchange2(int &a, int &b); int mai原创 2007-12-18 10:49:00 · 13428 阅读 · 1 评论 -
switch case被人忽视的一点!
这个分支语句怎么的用相信很多人晓得,如果碰到一个错误咋办?先看看程序: switch (t){ case 0: int a = 0; break; case 1: default: break;}原创 2007-12-18 14:12:00 · 4749 阅读 · 4 评论 -
面试题: 十进制INT数字转化为16进制字符串、实现字符串和数字的相互转化
自己练练了手,写了两个程序: 第一个:十进制的数字转化为16进制 int main(int argc, _TCHAR* argv[]){ int a = 100000000, i = 0, b; int c[8] = {0}; printf("%10.4x ", a); while (a) { b = a - (a>原创 2007-12-18 16:50:00 · 4018 阅读 · 0 评论 -
正负数的显示问题
先看看下面这段代码有什么问题吧:int _tmain(int argc, _TCHAR* argv[]){ unsigned char in_mac[2] = {0xd0, 0x01}; char *mac = (char *)in_mac; char info[50] = {0}; sprintf_s(info, "%02x%02x", m原创 2013-05-22 14:02:13 · 1440 阅读 · 0 评论 -
两种链表append a node 的方式
两种链表append a node 的方式原创 2010-09-26 17:28:00 · 2091 阅读 · 1 评论 -
关于算法导论上一道题的思考,求逆序对数目
关于算法导论上一道题的思考,求逆序对数目,时间复杂度为O(nlogn).原创 2010-06-11 14:00:00 · 2500 阅读 · 1 评论 -
typedef和const之间的trap
博客好久没有更新了,主要是因为工作忙,即便不忙也要看看书,工作了才发现好多东西根本就会直接忘记,因为我们工作用不到!比如c++的东西,现在连虚函数表都不快不记得了,惭愧咯!而且我还发现工作了,看书反倒成了一种非常好的休闲了,不过希望我的朋友,同学们都好. 现在就说说typedef和const之间的那么一道陷阱,而且还很深! 现在也是找工作的时间了,弄清楚这个还是很有好处的,或许很原创 2009-11-04 22:32:00 · 5933 阅读 · 4 评论 -
也谈谈二维数组的动态分配
这里先给出一个二维数组的动态分配,然后再给出我认为的更好的一种分配方式。 一般的动态的二维分配都是先给出二级指针的初始化,然后就是用多个循环给出一级指针的内存分配,如下: int **array1 = (int **)malloc(nrows * sizeof(int *));for(i = 0; i < nrows; i++) array1[i] = (int *原创 2009-10-05 21:09:00 · 1417 阅读 · 0 评论 -
C语言中的内存分配深入(二)
C语言中的内存分配深入(二)紧接上一篇文章讲,上次讲的内存分配这里讲分配的内存的回收的问题。对于指针以前就说过了,没有赋值地址的指针是不可以写的,这里就给一个更加深入的说法:第一、指针指向一个地址,因此,在不管以后写或是不写的情况下,它可以指向任何一个地址,而且都是可以的,比如: int *p , a, b; p = &a; p = &b;即便是原创 2008-04-18 20:10:00 · 1905 阅读 · 2 评论 -
C语言中的内存分配深入(一)
C语言中的内存分配深入这里不讲解c语言的内存分配怎么使用,只说要注意的问题。我们借用一下c++的,先看一个c++的内存分配:#include iostream>using namespace std;struct cpp_Format { float pData[5]; }; cpp_Format ** c_pp; int main(){ int i; c_原创 2008-04-17 08:18:00 · 4745 阅读 · 3 评论 -
c/c++中如何更改一个指针值
这个问题记得以前已经谈论这个问题,再来简单的说一下:如果是在一个作用域里面,就是直接改变他的指向就可以了,比如重新分配一个地址空间。或者指向另外一个地址空间。这个很简单,就不说了。如果要在另外一个函数里面来改变一个地址空间呢?两种方法,一种是使用指针参数改变,另一种是return方法!那么就要使用多一级指针,如果是2重指针,就要使用3重指针,同时在这个函数里面,分配指针的时候一原创 2008-01-05 16:31:00 · 4813 阅读 · 0 评论 -
数组与指针
有一天无意之间看到一篇文章很不错,里面总结了一些指针与数组的关系,概括性很强,文章在下面,看的时候发现有些问题,说的不是很好懂,我说说我的见解:首先指针和数组的名字表示的就是一个首地址,这一点可以肯定,但是数组是在堆里分配,而指针是在栈里分配,两者有者本质的区别,数组是有固定的地址,但是指针如果不使用new或者malloc的话,那么他就是处在一个“游离”的状态。先看下面的文章,我再说说一些原创 2007-10-12 10:27:00 · 1290 阅读 · 0 评论 -
李开复:算法的力量
算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实大家都被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,转载 2007-11-04 09:04:00 · 870 阅读 · 0 评论 -
c语言中的内存对齐
先看一个具体的问题:内存对齐的问题。struct倘若如此声明:struct something {......} 如果在结构体后面加上__attribute__((packed));记得带上后面的";"那么就是严格的各个成员的大小之和。或者可以在程序开头的地方加上#pragma pack(N),其中N为对齐的字节数,若为1则和__attribute__((packed))是一个意思了.原创 2007-05-10 13:23:00 · 1712 阅读 · 0 评论 -
抽象数据结构(ADT)中的初始化以及在调用函数中改变值的方法
呵呵我弄了4个多小时才弄好,之前还看到清华大学的一本数据结构的书上(李春葆的数据结构教程上机实验指导)出现了这种结构,真的是无语,就是Linklist *&list,我在我的系统里面编译过了,通不过,当然了我用的是linux可能跟vc的实现还是有差别的。希望有人可以告诉我Linklist *&list这个是什么东西。现在看一个单链表的结构:#define TSIZE 45 /* s原创 2007-05-10 11:04:00 · 2050 阅读 · 0 评论 -
c缺陷与陷阱之运算符的优先级
运算符的优先级如下表,从左到右降低,从上到下降低 ()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员)┃ 最高 ────────────────────────────┃ ↑ !(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址)┃ │ ────────────────────────────┃ │ *(指针所指原创 2007-05-08 18:08:00 · 1012 阅读 · 0 评论 -
开始看c语言的缺陷和陷阱,写下笔记
今天上午才上海回来学校,累的死,可能是累过头了,也不想睡觉了,就对着计算机看看电子文档吧,其实我很少在计算机上看书的,一般的情况就是游戏之。其实编程其实跟做人一样要把握细节,即使的c语言的高手而言这本书里面的东西也是非常必要研究的.正如书的开始作者说的,这本书不是对c语言的批评,也不是一本c语言的教程,作者假定我们有点c语言的功底和水平了。!废话少说,按照书的顺序来写我的阅原创 2007-05-08 16:27:00 · 1220 阅读 · 1 评论 -
学会使用malloc,学会对指针赋值
先看一个程序,其实这是我编的一个不算小的程序里面的片断,把曾经遇到的问题写出来:#includeint main(void){char *a;//a=(char *)malloc(20);a=gets(a);//scanf("%s",a);//getchar();puts(a);getchar();return 0; }这个是我在windows下面调试的一个程序,用的是dev c原创 2007-04-27 10:49:00 · 8687 阅读 · 4 评论 -
具体的*P的意思
今天在看程序的时候就发现一个问题,就是我的另外的一篇文章里面的一个程序,就是那个发生段错误的程序里面的。里面的一句就是给head初始化:struct film *head=NULL,而下面的对head的引用就是这么用的:if(head=NULL),我就想了初始化应该是把整个值(*head)都给初始化了啊,怎么是head啊,网上找一下就是了,其实很多的,牛人真的是多!下面是我找到的人原创 2007-04-23 22:00:00 · 2216 阅读 · 0 评论 -
我的程序段错误的研究
本来就是一个很简单的问题,但是我花了一个半小时,要是没有gdb这个东西那我真的是以为是我的linux的问题,其实菜鸟就是这个样子的啊,出了问题就怪系统,做人的时候出了问题就不要怪别人啊。呵呵,废话少说,go先看程序:film.c #include #include /* has the malloc prototype */#include /* ha原创 2007-04-23 20:37:00 · 1354 阅读 · 0 评论 -
Linux环境下的网络编程
Linux环境下的网络编程 xuyb Email:bai_xy@21cn.com 本文介绍了在Linux环境下的socket编程常用函数用法及socket编程的一般规则和客户/服务器模型的编程应注意的事项和常遇问题的解决方法,并举了具体代 码实例。要理解本文所谈的技术问题需要读者具有一定C语言的编程经验和TCP/IP方面的基本知识。要实习本文转载 2007-07-08 08:21:00 · 1112 阅读 · 0 评论 -
构造链表的一个注意事项
看这个程序片断:void push( st *head){ st *p,*q; int i; q=head; while (scanf("%d",&i)){ p=(st *)malloc(sizeof(st)); p->data=i; p->next=head->next; //q->next=p; //q=p;原创 2007-05-15 14:24:00 · 1991 阅读 · 0 评论 -
仍然是数组和指针的初始化,以及string类型的赋初始值
数组很简单,直接定义然后使用就是了:建立一个数组a[],如int a[20]=“adf”;如果只建立也就是只声明而不赋值,那要之后赋值就要给出一个循环,一个个的给值, char d[20]; for (i=0;i d[i]=“要给的”; 但是不可以再直接这么了:a[20]=“adf”;但是如果想一步到位的给a数组赋值那要怎么办呢?用strcpy或者strncpy了,strcpy(原创 2007-05-22 16:25:00 · 3251 阅读 · 0 评论 -
我的经验:指针和指针的引用
我一下讨论的都是在不用return把值进行返回的情况, 也就是说用指针的情况。很简单就是指针和引用,引用在新版本的c里面也有包含,可以使用。系统xp+ide用的 vc6.0:要把一个值通过调用函数改变,可以用指针和引用,这个值可以是int int *,char char*,或者说是结构体,结构体也有不同的情况,比如说,结构里面有结构体指针和没有的情况,这里我将就我的经历写一下。原创 2007-05-28 20:08:00 · 3820 阅读 · 7 评论 -
struct和 union用 sizeof 看字节对齐,以及__declspec( align( # ) ) 和 #pragma pack()的使用方式
union u{ double a; int b;}; union u2{ char a[13]; int b;}; union u3{ char a[13]; char b;}; coutcoutcout 都知道union的大小取决于它所有的成员中,占用空间最大的一个成员的大小。所以对于u来说,大小就是最大的double类型成员a了,所以sizeof(u)=sizeof(dou转载 2007-10-29 11:01:00 · 3084 阅读 · 0 评论 -
指针参数是如何传递内存的?
内存的分配何管理一直让许多c++爱好者头痛不已,不仿看看下面的东西!来自林锐的《高质量c++编程指南》指针参数是如何传递内存的? 7-4-1Test数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么? void GetM转载 2007-10-08 15:52:00 · 837 阅读 · 0 评论 -
公司笔试c、c++试题
现在的公司招聘,都要笔试面试.如果你不是那种编程功底非常深厚的人,又不好好准备一番,在笔试面试中往往会处于被动局面.虽然有些笔试题是故意为难我们,有点钻牛角尖.但是很多笔试题面试题确实能够很好地看出我们的基础. 在这里,我就略去那些钻牛角尖的题.从csdn论坛我近半年的收集中选出10道有代表性的题目,难度基本上是逐渐加大.对数组,指针,数据结构,算法,字符串,文件操作等问题都有覆盖.主要以c语转载 2007-10-27 20:54:00 · 2888 阅读 · 3 评论 -
指针指向常量的结果!
先看一个东西,char *w;w=(char *)malloc(20); w="asdddddd"; printf("s=%s",w); free(w); malloc这个语句是没有效果的,他给w在栈中分配了20个字节,但是下一句就变了w的指向,就是“asdddddd”的首地址。而字符串指针本来就可以直接指一个字符串的首地址。没有问题也不会出错1这个很简单,但是在w指向asdddddd原创 2007-06-17 23:34:00 · 1405 阅读 · 2 评论 -
c、c++程序的存储空间布局
从历史上将,c程序一直由以下几个部分组成:正文段:这个是由cpu执行的机器指令部分。通常,正文段是可以共享的,所以即使是频繁执行的程序(如文本编辑器,c编译器以及shell等),都只要在存贮器种有一个副本,另外,正文段常常是只读的,以防止程序由于以外而修改自身的指令。初始化数据段:通常此段被称为数据段,她包含程序种需要明确的赋初始值的变量。比如全局变量,出现在c函数之外的声明:原创 2007-09-05 13:02:00 · 1667 阅读 · 0 评论 -
typedef用于函数定义的一个例子
typedef用于定义基本类型或者结构体,很简单再看看怎么定义函数:不使用typedef的:#include using namespace std;double besty(int);double pam(int);void estimate(int, double (*pf)( int ));int main(void){ int code; cout cin >>cod原创 2007-09-03 22:04:00 · 11023 阅读 · 2 评论 -
调用函数按值传递还是使用地址?
最近特别爱使用调用函数,不晓得是不是对,但是用了就用了,毕竟研究的东西多点,没有坏处。调用函数,可以传值也可以通过通过地址的使用,传值和指针、引用我觉得作用是一样的,虽然本质不同,一般要改变值的时候就可以考虑用指针和引用。具体可以参考我的其他的文章。这里说说按值传递的本质,按值传递的时候传入调用函数的不是值的本身,而是一个副本,也就是说是在调用函数分配的地址上面使用副本的值,哪怕在副本的值原创 2007-05-30 00:47:00 · 1750 阅读 · 1 评论