C 不确定int regs=0,i,*regs的意思是什么
我正在维护和扩展诊断测试套件的功能,这段代码多次出现,我不确定它的作用是什么:C 不确定int regs=0,i,*regs的意思是什么,c,C,我正在维护和扩展诊断测试套件的功能,这段代码多次出现,我不确定它的作用是什么: int ret = 0, i, *reg; int size = sizeof(Regs)/sizof(Reg); for(i = 0; i<size; i++) { reg= (uint*)Regs[i].Number; *reg=0; } return ret; 是,或者它为什么有效。否,ret将始终为零。这个函数只是清除数组Regs中结构指向的一些uint。是的,我想你是对的。假设Reg
int ret = 0, i, *reg;
int size = sizeof(Regs)/sizof(Reg);
for(i = 0; i<size; i++) {
reg= (uint*)Regs[i].Number;
*reg=0;
}
return ret;
是,或者它为什么有效。否,ret将始终为零。这个函数只是清除数组Regs中结构指向的一些uint。是的,我想你是对的。假设Regs是一个Reg对象数组,那么它会将每个Reg.Number指向的对象归零,然后返回0。如果代码库遵循返回状态代码的范例,那么这样做似乎是合理的,在这种情况下,0通常意味着成功。看起来总是返回0。除非我只看到相关代码的一部分 int-ret=0,i,*reg 定义三个变量:一个名为ret的int、一个名为i的int和一个名为reg的int*。只有ret被初始化为0 原因是稍微简化的声明语法是:
declaration:
declaration-specifiers init-declarator-list[_opt_]
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer
这里的声明说明符只是int,然后我们有一个init声明器列表,由三个init声明器组成。其中一个有初始值设定项,另外两个没有。declarator*reg定义了一个指向声明说明符所说的任何类型的指针。请参见标准中的6.7声明,了解我在上述语法中遗漏的血淋淋的细节和部分。我的个人观点:
int ret = 0, i, *reg;
int size = sizeof(Regs)/sizof(Reg);
for(i = 0; i<size; i++)
{
reg= (uint*)Regs[i].Number;
*reg=0;
}
return ret;
行int size=sizeofRegs/sizofReg;将大小定义为称为Regs的缓冲区与其Reg类型的基本数据字段之间的原子维度。用于迭代结构本身注意:在C中,Regs不必是缓冲区/数组/流,只需在Sizeof方面大于Regs即可
for循环在每次迭代中从Reg中的数字字段位置开始将n字节归零。SUPPOSE Number是32位=4字节长的整数,从Reg中的字节4到字节7
对于可读性更强的uint*而言,uint*强制转换在C中是正常的,因为在处理内存时,一个简单的uint可能不足以跨越整个可寻址堆。我很少发现int*强制转换可以在堆上迭代
最后,在nothing失败后,在这种情况下,任何东西都不能使代码失败,因为甚至没有使用ret,返回值为0=正返回
为了更好地解释for循环中的操作,假设Regs是一个结构,在一行中包含4个寄存器(某种数组),每个寄存器的宽度为32字节,例如,从4到7的第二个字段字节称为数字32位整数字段。
在for循环运行之前和之后,以十进制格式对内存进行逐字节可视化,以便于使用和读取,可以是:
before: 111910460 § 721672678 § 1941200806 § -1183627007 § 1586684153 § 1875498315 § 1260999030 § 1325944862 § 1065932391 § 1844134883 § 1605637187 § -1318663956 § 233262241 § 1220589880 § 1712611369 § -2095694326 § -1982972241 § 1536475566 § 1550414594 § 60661453 § 1920891323 § 1052971320 § 151058183 § -693448823 § -763585993 § -1546059240 § -638901203 § 1592652624 § -26126893 § 359938920 § 730403663 § -2119128428 § 22506289 § 329168535 § 1888110366 § -1324425487 § -2128177580 § -1447190387 § -2102707104 § -834692095 § 233601466 § -2368015 § -1247566469 § -496146592 § 1399945760 § -433672213 § -1874762262 § -240141582 § 1361991330 § -2100310671 § -1716316415 § 1113810979 § 837914061 § -2004720198 § -499664162 § -581537344 § -1876582939 § -855186203 § -477447744 § 609476093 § -1551962613 § 1342130125 § -1245085596 § 70042099 § 853203728 § -1216264601 § -821207587 § -663767272 § 1811963624 § -1359626002 § 587239161 § 412800157 § 1308828835 § -484000995 § 1196157114 § 1554729984 § -588907472 § -862275327 § 2141670903 § -496863553 § -1461319540 § 2011880048 § 724185989 § -523083707 § 535075127 § -1252818631 § -1535682266 § 1731550626 § -1513281783 § 2056573089 § 542455754 § -1663652432 § 209157746 § -917714063 § -62336558 § -335893804 § -455431912 § -1338920623 § 966843505 § 698158966 § -1748732016 § -710422429 § 429351988 § 1404039358 § 1828069719 § -1849911876 § -1756314151 § 1046003361 § -1124626131 § 422202 § 608265685 § 1538084062 § -1342247255 § 1734342148 § -2095965518 § 544674987 § -12582890 § 1365311130 § 1104188373 § 688131395 § -1615783097 § 755406204 § -151161805 § 1955152994 § -427907710 § 700996102 §
after: 111910460 § 721672678 § 1941200806 § -1183627007 § 0 § 0 § 0 § 0 § 1065932391 § 1844134883 § 1605637187 § -1318663956 § 233262241 § 1220589880 § 1712611369 § -2095694326 § -1982972241 § 1536475566 § 1550414594 § 60661453 § 1920891323 § 1052971320 § 151058183 § -693448823 § -763585993 § -1546059240 § -638901203 § 1592652624 § -26126893 § 359938920 § 730403663 § -2119128428 § 22506289 § 329168535 § 1888110366 § -1324425487 § 0 § 0 § 0 § 0 § 233601466 § -2368015 § -1247566469 § -496146592 § 1399945760 § -433672213 § -1874762262 § -240141582 § 1361991330 § -2100310671 § -1716316415 § 1113810979 § 837914061 § -2004720198 § -499664162 § -581537344 § -1876582939 § -855186203 § -477447744 § 609476093 § -1551962613 § 1342130125 § -1245085596 § 70042099 § 853203728 § -1216264601 § -821207587 § -663767272 § 0 § 0 § 0 § 0 § 1308828835 § -484000995 § 1196157114 § 1554729984 § -588907472 § -862275327 § 2141670903 § -496863553 § -1461319540 § 2011880048 § 724185989 § -523083707 § 535075127 § -1252818631 § -1535682266 § 1731550626 § -1513281783 § 2056573089 § 542455754 § -1663652432 § 209157746 § -917714063 § -62336558 § -335893804 § -455431912 § -1338920623 § 966843505 § 698158966 § 0 § 0 § 0 § 0 § 1828069719 § -1849911876 § -1756314151 § 1046003361 § -1124626131 § 422202 § 608265685 § 1538084062 § -1342247255 § 1734342148 § -2095965518 § 544674987 § -12582890 § 1365311130 § 1104188373 § 688131395 § -1615783097 § 755406204 § -151161805 § 1955152994 § -427907710 § 700996102 §
ret看起来只是为了跟踪将返回的值,以防在它结束时更改它并将其赋给uint*然后赋给int*可能是一个错误-不确定这是复制错误还是原始代码不可靠。我不是代码的原始作者,但是我很确定一个无符号0和一个有符号0应该有相同的表示形式。@Steve,对于uint和int=,0都是零。对于有符号int,有正负零的表示形式。嗯,这就是我所想的。那么,为什么int-ret=0,i,*regs;C中的有效行?我还是不太清楚它是如何工作的。@ardentsonata,int是这行中所有东西的类型。ret是一个初始化为零的int,i是一个int,*regs是一个int,这使得regs成为一个int指针。有意义吗?int-ret=0,i,*regs;等于int-ret=0;int i;int*regs;
int ret;
ret = 0; //return value, if nothing changes it while running the sub, the return is (positive) as every C routine should do
int i; // i is what it is, no initialisation is performed
int* reg; //reg is what it is, no initialisation is performed.
before: 111910460 § 721672678 § 1941200806 § -1183627007 § 1586684153 § 1875498315 § 1260999030 § 1325944862 § 1065932391 § 1844134883 § 1605637187 § -1318663956 § 233262241 § 1220589880 § 1712611369 § -2095694326 § -1982972241 § 1536475566 § 1550414594 § 60661453 § 1920891323 § 1052971320 § 151058183 § -693448823 § -763585993 § -1546059240 § -638901203 § 1592652624 § -26126893 § 359938920 § 730403663 § -2119128428 § 22506289 § 329168535 § 1888110366 § -1324425487 § -2128177580 § -1447190387 § -2102707104 § -834692095 § 233601466 § -2368015 § -1247566469 § -496146592 § 1399945760 § -433672213 § -1874762262 § -240141582 § 1361991330 § -2100310671 § -1716316415 § 1113810979 § 837914061 § -2004720198 § -499664162 § -581537344 § -1876582939 § -855186203 § -477447744 § 609476093 § -1551962613 § 1342130125 § -1245085596 § 70042099 § 853203728 § -1216264601 § -821207587 § -663767272 § 1811963624 § -1359626002 § 587239161 § 412800157 § 1308828835 § -484000995 § 1196157114 § 1554729984 § -588907472 § -862275327 § 2141670903 § -496863553 § -1461319540 § 2011880048 § 724185989 § -523083707 § 535075127 § -1252818631 § -1535682266 § 1731550626 § -1513281783 § 2056573089 § 542455754 § -1663652432 § 209157746 § -917714063 § -62336558 § -335893804 § -455431912 § -1338920623 § 966843505 § 698158966 § -1748732016 § -710422429 § 429351988 § 1404039358 § 1828069719 § -1849911876 § -1756314151 § 1046003361 § -1124626131 § 422202 § 608265685 § 1538084062 § -1342247255 § 1734342148 § -2095965518 § 544674987 § -12582890 § 1365311130 § 1104188373 § 688131395 § -1615783097 § 755406204 § -151161805 § 1955152994 § -427907710 § 700996102 §
after: 111910460 § 721672678 § 1941200806 § -1183627007 § 0 § 0 § 0 § 0 § 1065932391 § 1844134883 § 1605637187 § -1318663956 § 233262241 § 1220589880 § 1712611369 § -2095694326 § -1982972241 § 1536475566 § 1550414594 § 60661453 § 1920891323 § 1052971320 § 151058183 § -693448823 § -763585993 § -1546059240 § -638901203 § 1592652624 § -26126893 § 359938920 § 730403663 § -2119128428 § 22506289 § 329168535 § 1888110366 § -1324425487 § 0 § 0 § 0 § 0 § 233601466 § -2368015 § -1247566469 § -496146592 § 1399945760 § -433672213 § -1874762262 § -240141582 § 1361991330 § -2100310671 § -1716316415 § 1113810979 § 837914061 § -2004720198 § -499664162 § -581537344 § -1876582939 § -855186203 § -477447744 § 609476093 § -1551962613 § 1342130125 § -1245085596 § 70042099 § 853203728 § -1216264601 § -821207587 § -663767272 § 0 § 0 § 0 § 0 § 1308828835 § -484000995 § 1196157114 § 1554729984 § -588907472 § -862275327 § 2141670903 § -496863553 § -1461319540 § 2011880048 § 724185989 § -523083707 § 535075127 § -1252818631 § -1535682266 § 1731550626 § -1513281783 § 2056573089 § 542455754 § -1663652432 § 209157746 § -917714063 § -62336558 § -335893804 § -455431912 § -1338920623 § 966843505 § 698158966 § 0 § 0 § 0 § 0 § 1828069719 § -1849911876 § -1756314151 § 1046003361 § -1124626131 § 422202 § 608265685 § 1538084062 § -1342247255 § 1734342148 § -2095965518 § 544674987 § -12582890 § 1365311130 § 1104188373 § 688131395 § -1615783097 § 755406204 § -151161805 § 1955152994 § -427907710 § 700996102 §