对于指针变量p,p <(p + 1)是否为假是否可能?请解释一下你的答案.如果是,在哪种情况下会发生这种情况?
我想知道p + 1是否会溢出并且等于0.
例如,在64位PC上使用GCC-4.8进行C语言程序:
int main(void) {
void *p=(void *)0xFFFFFFFFFFFFFFFF;
printf("p :%p\n", p);
printf("p+1 :%p\n", p+1);
printf("Result :%d\n", p<p+1);
}
Run Code Online (Sandbox Code Playgroud)
它返回:
p : 0xffffffffffffffff
p+1 : (nil)
Result : 0
Run Code Online (Sandbox Code Playgroud)
所以我相信这种情况是可能的.对于无效的指针位置,它可能发生.这是我能想到的唯一解决方案.还有其他人吗?
注意: 不做任何假设.考虑任何可能发生这种情况的编译器/平台/架构/操作系统.
我在某些导入库不可用并且是 3rd 方的环境中运行 pylint。因此,pylint 会为这些导入生成错误类 wrong-import-order C0411。
有没有办法指示哪个应该被视为第 3 方?
我可以假设C/C++结构指针总是指向第一个成员吗?
例1:
typedef struct {
unsigned char array_a[2];
unsigned char array_b[5];
}test;
//..
test var;
//..
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,&var总是指向array_a吗?在上面的例子中,是否可以将指针强制转换为unsigned char指针并分别访问每个字节?
例2:
function((unsigned char *)&var,sizeof(test));
//...
//...
void function(unsigned char *array, int len){
int i;
for( i=0; i<len; i++){
array[i]++;
}
}
Run Code Online (Sandbox Code Playgroud)
这会正常吗?
注意:我知道字符在结构中是字节对齐的,因此我假设上面结构的大小是7个字节.