uint32_t    
转载自:http://blog.sina.com.cn/s/blog_6aea878e0100tl0f.html
体会
1>. 在写程序时注意"无符号类型"的使用, 各种类型边界值的情况.
    如:
   a> 当某个数据不可能为负数时我们一定要考虑用以下类型:
      unsigned char, unsigned int, uint32_t, size_t, uint64_t, unsignedlong int,
   b> 当有些数据你不知道是正负时一定不要用"a>"中的类型,不然他永远也不可能为负.
       
   c> 数据的边界值要多注意, 如:
      uint32_t    a,b, c;
      uint64_t   m;
      
      m = a * b + c;
      在该运算中可能出现错误, "a*b"的类型可能超过uint32_t的最大值,这时一定不要忘了类型转换.
      m = ((uint64_t)a) * b + c;

2>. 在适当的时候要会自我定义数据类型.
    我们都知道linuxC开发中的常见扩展数据类型的定义有:uint8_t, uint16_t, uint32_t, uint64_t, size_t,ssize_t, off_t .... 他之所以要自己定义出数据类型是有道理的, 如: typdef unsigned intuint32_t; 表示uint32_t为32位无符号类型数据, 其实size_t也是32位无符号数据类型,为什么不直接写"unsigned int"呢?
    为了程序的可扩展性, 假如将来我们需要的数据大小变成了64bit时,我们只需要将typedef long longsize_t就可以了, 不然我们可要修改好多好多的地方了.
这种设计我们同样可以应用到自己的开发中来,当自己设计一个int类型保存某种数据时,但你又没把握将来是不是要用longint时你可以引用一个自己定义的数据类型的啊!

stdint.h
-----------------------------
typedef unsigned int           uint32_t;

uint32_t.c
-----------------------------

  1. #include <stdio.h>
  2. #if 0
  3. #include<stdint.h>   // uint32_t
  4. #endif
  5. typedef unsigned int      uint32_t;
  6. typedef unsigned long long uint64_t;
  7. int main()
  8. {
  9. uint32_t a;
  10. a = 12;
  11. printf("a = %x\n", a);
  12. printf("sizeof(a) = %d\n", sizeof(a));
  13. uint64_t b;
  14. b = 12;
  15. printf("b = %x\n", b);
  16. printf("sizeof(b) = %d\n", sizeof(b));
  17. }
  18. a = c
  19. sizeof(a) = 4
  20. b = c
  21. sizeof(b) = 8
  1. int main()
  2. {
  3. unsigned __int64 a ;
  4. printf("请输入a:");
  5. scanf("%I64u",&a);
  6. printf("a = %I64u\n",a);
  7. a = (unsigned __int64)1 << 60;
  8. printf("a = %I64u\n",a);
  9. a = 1 << 60;//由于没有转换类型,1移位造成越界变成了0
  10. printf("a = %I64u\n",a);
  11. return 0;
  12. }


  1. #include<stdio.h>
  2. int main()
  3. {
  4. unsigned long long a = (unsigned long long)1 << 63;
  5. printf("%llu\n",a);
  6. return 0;
  7. }

树的双亲表示法

由于树中的每个结点都有唯一的一个双亲结点,所以可用一组连续的存储空间(一维数组)存储树中的各个结点,数组中的一个元素表示树中的一个结点,每个结点含两个域,数据域存放结点本身信息,双亲域指示本结点的双亲结点在数组中位置。

C语言代码实现:

#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 20
typedef char ElemType;
typedef struct Snode //结点结构
{
ElemType data;
int parent;
}PNode; typedef struct //树结构
{
PNode tnode[MAX_SIZE];
int n; //结点个数
}Ptree; void InitPNode(Ptree &tree)
{
int i,j;
char ch;
printf("请输入结点个数:\n");
scanf("%d",&(tree.n)); printf("请输入结点的序及值其双亲序号:\n");
for(i=0; i<tree.n; i++)
{
fflush(stdin);
scanf("%c,%d",&ch,&j);
tree.tnode[i].data = ch;
tree.tnode[i].parent = j;
}
tree.tnode[0].parent = -1;
} void FindParent(Ptree &tree)
{
int i;
printf("请输入要查询的结点的序号\n");
scanf("%d",&i);
printf(" %c 的父亲结点序号为 %d\n",tree.tnode[i].data,tree.tnode[i].parent);
} int main()
{
Ptree tree;
InitPNode(tree);
while(1) //测试
FindParent(tree);
return 0;
}

测试结果:

C语言记录汇总的更多相关文章

  1. Go语言语法汇总(转)

    Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法   目录(?)[+]   最近看了看GoLang,把Go语言的语法 ...

  2. 12天学好C语言——记录我的C语言学习之路(Day 12)

    12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...

  3. 12天学好C语言——记录我的C语言学习之路(Day 11)

    12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...

  4. 12天学好C语言——记录我的C语言学习之路(Day 10)

    12天学好C语言--记录我的C语言学习之路 Day 10: 接着昨天的指针部分学习,有这么一个题目: //还是四个学生,四门成绩,只要有学生一门功课没及格就输出这个学生的所有成绩 /*//progra ...

  5. 12天学好C语言——记录我的C语言学习之路(Day 9)

    12天学好C语言--记录我的C语言学习之路 Day 9: 函数部分告一段落,但是我们并不是把函数完全放下,因为函数无处不在,我们今后的程序仍然会大量运用到函数 //转入指针部分的学习,了解指针是什么 ...

  6. 12天学好C语言——记录我的C语言学习之路(Day 8)

    12天学好C语言--记录我的C语言学习之路 Day 8: 从今天开始,我们获得了C语言中很有力的一个工具,那就是函数.函数的魅力不仅于此,一个程序到最后都是由众多函数组成的,我们一定要用好函数,用熟练 ...

  7. 12天学好C语言——记录我的C语言学习之路(Day 7)

    12天学好C语言--记录我的C语言学习之路 Day 7: 昨天进行了一天的数组学习,今天大家可以先写几个昨天的程序热热身,回顾回顾,然后今天第一个新程序也是关于数组的,比较难,准备好就开始啦! //输 ...

  8. 12天学好C语言——记录我的C语言学习之路(Day 6)

    12天学好C语言--记录我的C语言学习之路 Day 6: 今天,我们要开始学习数组了. //①数组部分,数组的大小不能够动态定义.如下: //int n;   scanf("%d,& ...

  9. 12天学好C语言——记录我的C语言学习之路(Day 5)

    12天学好C语言--记录我的C语言学习之路 Day 5: 第五天的学习开始了,今天我们主要对几个程序进行编写,让自己充分的熟练编程语言,大量的题目会让自己变的精炼.以一个程序(program 5.1) ...

随机推荐

  1. Java进阶面试题大集合-offer不再是问题

    Java基础 1.List 和 Set 的区别 2.HashSet 是如何保证不重复的 3.HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)? 4.HashMap ...

  2. CM5.x配置spark错误解决

    通过cloudera manager 5.x添加spark服务,在创建服务过程中,发现spark服务创建失败,可以通过控制台错误输出看到如下日志信息: + perl -pi -e 's#{{CMF_C ...

  3. tomcat远程部署war包,显示连接被重置

    在tomcat 目录: /opt/apache-tomcat-9.0.13/webapps/manager/WEB-INF/web.xml 下修改: <multipart-config> ...

  4. java mvc spring boot

    spring mvchttp://www.cnblogs.com/wcf6676/p/5333352.html 利用mybatis-generator自动生成代码http://www.cnblogs. ...

  5. kafka相关命令

    查看kafka消费组对应的信息:./kafka-consumer-groups.sh --bootstrap-server 172.17.6.10:9092 --describe --group fr ...

  6. 关于话题模型(topic model)的一些思考

    最近在分析知乎的‘问题’文本所属的话题,用python提取,实现了LSTM和LDA模型在这个方面的应用,但是效果不是很理想,一个是这些文本属于短文本,另外用来分析的文本本身包含多个领域的问题,并且数量 ...

  7. 关于jquery中on绑定click事件在苹果手机失效的问题

    用一个div当做了一个按钮来使用. <div class="button"> <div class=" next_button button_left ...

  8. [转载]智能科普:VR、AR、MR的区别

    智能科普:VR.AR.MR的区别 http://news.zol.com.cn/553/5534833.html news.zol.com.cn 2015-11-23 16:00 近日, 获得谷歌5亿 ...

  9. 字符集更改步骤,mysql乱码

    关键字:Mysql乱码,mysql字符集修改 #字符集更改步骤~

  10. Linux-eth0 eth0:1 ifcfg-lo ifcfg-lo:0 和eth0.1关系、ifconfig以及虚拟IP实现介绍

    eth0 eth0:1 和eth0.1三者的关系对应于物理网卡.子网卡.虚拟VLAN网卡的关系:物理网卡:物理网卡这里指的是服务器上实际的网络接口设备,这里我服务器上双网卡,在系统中看到的2个物理网卡 ...