1. 变量初始化

函数内部的变量如果不初始化的话默认不是0而是一个随机值。

下面的程序用来打印一个未初始化的无符号的整型值,执行几遍,每次的结果都会不一样

#include <stdio.h>void PrintUint()
{/* 默认是随机值,不一定是0 */unsigned int i;if (i != 0){printf("i = %u \r\n", i);}return;}void main(){unsigned int i,j;printf("start test : \r\n");for(j = 0; j < 5; j++){PrintUint();return;}

2. 结构体指针移动

当不同的数据块连续存储时,从一个数据块结构体指针指向相邻的不同的数据块的结构体的时候,
只需要指针值加1,而不是加上当前整个结构体的大小。因为结构体指针的移动单位是当前整个
结构体的大小。

在处理内核网络报文结构体SKB的时候,经常会遇到从一个数据头指针获取相邻的下一个头域指针,比如说

使用ip_hdr获取IP头的时候,如果想要获取tcp、或者udp的头域,需要在当前ip的头指针加1,而不是加上整个IP头大小。

正确操作:

/* 获取IP头指针 */
struct iphdr *iph = ip_hdr(skb);/* 获取udp/tcp头指针 */
struct udphdr *udph = iph + 1;

错误操作:

/* 获取IP头指针 */
struct iphdr *iph = ip_hdr(skb);/* 获取udp/tcp头指针 */
struct udphdr *udph = iph + sizeof(struct iphdr);

一言以蔽之,c语言基础没掌握好 。后人哀之而鉴之。

C代码开发遇到的问题 变量初始化和结构体指针移动相关推荐

  1. Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)

    目录 结构体类型(struct) 声明 声明并初始化 结构体指针 方法 Generate 方法和函数的区别 匿名结构体 序列化 全部代码 截图 结构体类型(struct) 去除了C++等语言的的继承. ...

  2. c语言结构体学习整理(结构体初始化,结构体指针)

    渣渣c的c语言学习之路 1.关于c语言的结构体: 首先我们为什么要用到结构体,我们都已经学了很多int char -等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活使用, ...

  3. 结构体指针变量含义,结构体指针函数

    最近在STM的GPIO结构体定义中看到源代码的时候,顺便复习下结构体指针变量的定义及typedef 的使用. 1.结构体类型定义 定义方式1: Typedef struct LNode { int d ...

  4. 结构体指针和结构体指针变量的区别

    文章目录 前言 一.普通结构体变量 二.结构体指针变量 三.结构体指针 完整代码如下: 前言 结构体变量主要有三种应用场景:1.普通结构体变量:2.结构体指针变量:3.结构体指针. 一.普通结构体变量 ...

  5. C语言结构体指针与结构体变量作形参的区别

    区别 结构体变量 结构体变量作为函数参数,传递的是结构体变量本身,是一种值传递 形参结构体变量成员值的改变不影响对应的实参构体变量成员值的改变 结构体指针 结构体指针作为函数参数,传递的是指向结构体变 ...

  6. C语言 malloc() + 结构体指针定义结构体变量

    之前在学习链表的过程中,笔者认为新节点必须如下定义: struct Node *p; struct Node {int val;p pNext; };int main() {Node Node1;No ...

  7. 用结构体指针指向(-)或结构体变量加点(.)后不出现结构体成员

    今天写代码时遇到这么个问题:用结构体指针指向(->)或结构体变量加点(.)后不出现结构体成员,虽然不影响编写,但效率降低,容易出错. 代码入下: stack.h #ifndef __STACK_ ...

  8. 嵌入式开发——结构体指针作为参数传递变量的值不正确

    问题描述 由于海思芯片紧缺,公司决定启用一款新的音视频处理芯片,我负责要将原有的算法库移植到新平台.在移植的过程中,发现调用某个图像转换函数时,得不到正确的结果,而且这个函数还是其他的库里实现的,我只 ...

  9. python结构体变量_结构体变量 和 结构体指针(示例代码)

    为什么结构体在声明变量不需要去动态的分配内存,而声明结构体指针后,如果对成员进行操作需要分配内存,或者需要定义. 首先变量的声明与定义: extern int i; //声明,不是定义 int i; ...

最新文章

  1. 大年初一微信闪退?看看如何修复的
  2. 嗨,你真的懂this吗?
  3. Kotlin学习 PART 2:kotlin基础
  4. 操作系统之存储管理——FIFO算法和LRU算法
  5. 机器人学习--Gazebo学习--模型库和编辑模型
  6. boost::histogram::accumulators::count用法的测试程序
  7. redshift教程_分析和可视化Amazon Redshift数据—教程
  8. gitee怎么仓库间传文件_实现一个简单的基于码云(Gitee) 的 Storage
  9. java多线程爬虫框架crawler4j的使用
  10. SiamFC++,90 fps的单目标跟踪SOTA
  11. 计算机网络实验报告3-tcp,计算机网络实验报告3-TCP.doc
  12. Eclipse-JAVA版本
  13. inout口简单说明
  14. Hibernate注释总结
  15. node.js的初步见解
  16. C语言写出猜数字游戏的代码
  17. 办公逸CTO王斌:提高产品响应速度应注意的二十五个技术细节
  18. 实施工作20190313
  19. 音频(六)Mel滤波器组_原理简介
  20. Docker实战笔记

热门文章

  1. log4j的NDC/MDC区别与应用
  2. j3455跑mysql_自用NAS升级折腾小记+J3455开硬件直通
  3. 计算机无法识别华为m3,华为8寸M3(非青春版)电脑连接问题报告
  4. 【Paper】2020_多智能体系统的分布式故障估计方法研究
  5. 2.2 理解 Mini-batch 梯度下降-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  6. Beyond Compare 3 许可证密钥被撤销
  7. xilinx IP核之ROM
  8. supervisor
  9. 【PC工具】创客、arduino爱好者必备,最最简单好用硬件电路连线绘图工具Fritzing...
  10. 【PC工具】在线MP3转WAV工具,MP3文件转换成arduino可以直接播放的wav格式