6868百家乐博彩平台注册送免费体育赛事_对于结构体中指针的一些研讨
发布日期:2023-10-30 04:19    点击次数:167

6868百家乐博彩平台注册送免费体育赛事_对于结构体中指针的一些研讨

在线博彩网站6868百家乐博彩平台注册送免费体育赛事_ 01 缘由

在上篇著作《STM32编程中排列和结构体的集中》中宝马会骰宝,有读者对下列代码有疑问

typedef 宝马会骰宝struct{   char *name;  //姓名   int num;  //学号   int age;  //年岁   float score;  //获利 }stuff_s; stuff_s xiaoming; void xiaoming_inf_init() {   xiaoming.name = "xiaoming";   xiaoming.num = 1;   xiaoming.age = 18.0;   xiaoming.score = 100; } 

留言到

6868百家乐

很彰着,这位读者领略到了name成员是个指针,在莫得对指针分派内存时,就径直复制“xiaoming”字符串,这是失误的。先说下论断,这个是莫得问题的,鄙人文我会详备说明下。

02 说明

率先,实践是教练真谛的独一圭臬,咱们径直在编译器运行代码即可,这里我使用的是IAR编译,在VisualStudio中运行效果亦然通常的,这里我使用IAR为例

皇冠hg86a

不错看到,运行莫得问题的,name成员被通俗赋值。这里瞩目name指针指向的位置是0x8002A5C,这是在flash的地址范围,也即是编译器径直把“xiaoming”字符串放到了flash中,动作一个常量,然后把这个常量的指针赋给name指针,是以毋庸提前给name指针央求内存空间。对于STM32的内存分派,不错看之前推文《C谈话在STM32中的内存分派》。这么写亦然正当且正确的,虽然咱们最熟谙表情如下

xiaoming.name = (char *)malloc(10); memcpy(xiaoming.name,"xiaoming",8); xiaoming.num = 1; xiaoming.age = 18.0; xiaoming.score = 100; free(xiaoming.name); 

运行效果如下

不错看出,name指针是指向内存的,和刚运转的代码是有鉴识的。那么像刚运转的写法,如下

xiaoming.name = "xiaoming"; 

编译通俗,运行通俗,在使用中有什么按捺吗?谜底是有的

char test_char; xiaoming.name = "xiaoming"; test_char = xiaoming.name[2]; 

这么写是正确的,test_char不错被正确的赋值字符a;但如下写法是失误的

xiaoming.name = "xiaoming"; xiaoming.name[2] = 'Q'; 

这么写不错编译通过,履行的时辰也不报错,然则并不成达到修改第3个字符的宗旨。

zh皇冠手机网址多少坚韧欧博棋牌游戏注册送彩金

践诺上因为name指针指向的是Flash,不错通过上头的秩序进行读取操作,然则不成按上头秩序进行写入操作。

博彩平台注册送免费体育赛事与足球明星XXX同框合影,网友纷纷猜测他是加入他的球队了吗?

如若按底下的写法,读取和写入的操作的操作都是莫得问题的,因为name指针指向的是内存,具有可读可写的属性。

皇冠体育app
xiaoming.name = (char *)malloc(10); memcpy(xiaoming.name,"xiaoming",8); xiaoming.num = 1; xiaoming.age = 18.0; xiaoming.score = 100; free(xiaoming.name); 

是以日常代码编写中需要瞩目这些,我的不雅点是:按照上述秩序,欧博娱乐开户先对指针央求内存,然后再赋值。

虽然,万事莫得王人备,需要视情况而定,下列情况,你也不错径直将字符串赋给指针

阐明指针不会有写入操作,唯独读操作,且你以为多加一句memcpy语句影响你的代码运行速率了。

阐明指针不会有写入操作,唯独读操作,且系统莫得富足的内存给指针央求了。

03 const关节字

上文既然提到了只读属性,那么咱们就再说一下const关节字。大家先看如下代码操作

typedef struct{   const char *name;  //姓名   int num;  //学号   int age;  //年岁   float score;  //获利 }stuff_s; stuff_s xiaoming; int main(void) {   xiaoming.name = (char *)malloc(10);   memcpy(xiaoming.name,"xiaoming",8);   xiaoming.name[2] = 'Q';   xiaoming.num = 1;   xiaoming.age = 18.0;   xiaoming.score = 100;   free(xiaoming.name); } 

指针name前加了const关节字,这段代码在IAR编译器中是根蒂编译欠亨过的。

原因很浅薄,即是因为指针name具有const属性,不成被写入。

电脑a盘b盘是什么意思

是以,在上一节最有一部分说到,当你阐明指针不会有写入操作,唯独读操作,你不错在这个指针界说前加一个const属性,因为技俩代码不是你一个保重的,你策划时以为这个指针唯独读操作,就加const,这么别东谈主进行写造访时径直就会在IAR报错,而不会将这个荫藏的隐患留传在居品中。

虽然,上文界说的const char *name;亦然不模范的,当这个指针加了const,就应该在指针的名字中体现到,这个不同公司有不同的定名模范,每个东谈主也有每个东谈主的模范,这里不在演示了。

多氟多(002407)在8月8日被媒体曝光有意参与重整,公司当日晚间披露公告回应称,确实以联合体形式参与了破产重整投资人的招募和遴选条件。在7月,联创股份(300343)也曾宣布拟参与本次破产重整。

皇冠客服飞机:@seo3687

本文转载自微信公众号「解析编程」

【裁剪保举】

Kubernetes容器平台架构解读 支付宝 App 集五福版发布:福相伴,五福,飞快到! Windows 11 22526新版竖立大宗问题!新特点抢先看 WiFi7有多强?比WiFi6高三倍,速率快如飞 Python再获年度编程谈话,微软或成最大赢家