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 §