日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/4/5 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C代码开发遇到的问题 变量初始化和结构体指针移动 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 變量初始化

函數(shù)內(nèi)部的變量如果不初始化的話默認(rèn)不是0而是一個(gè)隨機(jī)值。

下面的程序用來打印一個(gè)未初始化的無符號(hào)的整型值,執(zhí)行幾遍,每次的結(jié)果都會(huì)不一樣

#include <stdio.h>void PrintUint() {/* 默認(rèn)是隨機(jī)值,不一定是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. 結(jié)構(gòu)體指針移動(dòng)

當(dāng)不同的數(shù)據(jù)塊連續(xù)存儲(chǔ)時(shí),從一個(gè)數(shù)據(jù)塊結(jié)構(gòu)體指針指向相鄰的不同的數(shù)據(jù)塊的結(jié)構(gòu)體的時(shí)候, 只需要指針值加1,而不是加上當(dāng)前整個(gè)結(jié)構(gòu)體的大小。因?yàn)榻Y(jié)構(gòu)體指針的移動(dòng)單位是當(dāng)前整個(gè) 結(jié)構(gòu)體的大小。

在處理內(nèi)核網(wǎng)絡(luò)報(bào)文結(jié)構(gòu)體SKB的時(shí)候,經(jīng)常會(huì)遇到從一個(gè)數(shù)據(jù)頭指針獲取相鄰的下一個(gè)頭域指針,比如說

使用ip_hdr獲取IP頭的時(shí)候,如果想要獲取tcp、或者udp的頭域,需要在當(dāng)前ip的頭指針加1,而不是加上整個(gè)IP頭大小。

正確操作:

/* 獲取IP頭指針 */ struct iphdr *iph = ip_hdr(skb);/* 獲取udp/tcp頭指針 */ struct udphdr *udph = iph + 1;

錯(cuò)誤操作:

/* 獲取IP頭指針 */ struct iphdr *iph = ip_hdr(skb);/* 獲取udp/tcp頭指針 */ struct udphdr *udph = iph + sizeof(struct iphdr);

一言以蔽之,c語言基礎(chǔ)沒掌握好 。后人哀之而鑒之。

?

總結(jié)

以上是生活随笔為你收集整理的C代码开发遇到的问题 变量初始化和结构体指针移动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。