當前位置:
首頁 >
C代码开发遇到的问题 变量初始化和结构体指针移动
發布時間:2025/4/5
27
豆豆
生活随笔
收集整理的這篇文章主要介紹了
C代码开发遇到的问题 变量初始化和结构体指针移动
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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代码开发遇到的问题 变量初始化和结构体指针移动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 内核源码分析 IPv6报文接
- 下一篇: sendto 返回errnor 1,错误