C &引用;“不在乎”;指针?
我有这样一个函数:C &引用;“不在乎”;指针?,c,pointers,C,Pointers,我有这样一个函数: uint8_t getULEB128Value(uint8_t *p, uint32_t *to){ unsigned int result; uint8_t count = 1; uint8_t cur; result = *p; if(result > 0x7F){ count++; cur = *(++p); result = (result & 0x7F) | (
uint8_t getULEB128Value(uint8_t *p, uint32_t *to){
unsigned int result;
uint8_t count = 1;
uint8_t cur;
result = *p;
if(result > 0x7F){
count++;
cur = *(++p);
result = (result & 0x7F) | (cur << 7);
if(cur > 0x7F){
count++;
cur = *(++p);
result |= ((cur & 0x7F) << 14);
if(cur > 0x7F){
count++;
cur = *(++p);
result |= ((cur & 0x7F) << 21);
if(cur > 0x7F){
count++;
cur = *(++p);
result |= ((cur & 0x7F) << 28);
}
}
}
}
*to = result;
return count;
}
uint8\u t getULEB128Value(uint8\u t*p,uint32\u t*to){
无符号整数结果;
uint8_t计数=1;
uint8_t cur;
结果=*p;
如果(结果>0x7F){
计数++;
cur=*(++p);
结果=(结果&0x7F)|(当前0x7F){
计数++;
cur=*(++p);
结果|=((cur&0x7F)0x7F){
计数++;
cur=*(++p);
结果|=((cur&0x7F)0x7F){
计数++;
cur=*(++p);
结果|=((cur&0x7F)通常的模式是允许将空指针传递到函数中,并在写入值之前进行检查:
if (to != NULL) {
*to = result;
}
那么你可以这样称呼它
result = getULEB128Value(p, NULL);
当您不想在“to”指针中写入任何内容时。通常的模式是允许将空指针传递到函数中,并在写入值之前进行检查:
if (to != NULL) {
*to = result;
}
那么你可以这样称呼它
result = getULEB128Value(p, NULL);
当您不想在“to”指针中写入任何内容时。在C语言中,法律不允许取消对不指向现有有效对象的指针的引用
要找到长度(如果我正确理解了你的问题),你可以做如下简单的事情:
size_t GetLength(const uint8_t* p)
{
size_t l = 1;
while (*p & 0x80)
{
p++;
l++;
}
return l;
}
在C语言中,法律不允许取消对不指向现有有效对象的指针的引用
要找到长度(如果我正确理解了你的问题),你可以做如下简单的事情:
size_t GetLength(const uint8_t* p)
{
size_t l = 1;
while (*p & 0x80)
{
p++;
l++;
}
return l;
}
/dev/null的概念不适用于指针,因为它不是一个流。如果向指针写入多个数据,通常会为每个值递增指针,因此实际上只在指针后面写入第一个值。因为指针算术定义良好,所以不可能有“不在乎”的值指针。由于指针不是流,因此/dev/null的概念不适用于指针。如果向指针写入多个数据,通常会为每个值递增指针,因此实际上除了指针后面的第一个值之外,其他值都会写入。由于指针算术定义良好,因此不可能有“不在乎”的值指针。你真正想做什么?Asizeof(*ptr)
做作业你基本上是在结果中返回指针的大小(4或8),在值中返回垃圾。你确定你明白你在做什么吗?我更改了函数,所以你会看到我在做什么只需包装函数-uint8\t getULEB128Value\u(uint8\t*p){uint8_t dummy;return getULEB128Value(p,&dummy);}
您真正想做什么?Asizeof(*ptr)
您基本上返回指针的大小(4或8)在结果中,垃圾在值中。你确定你明白你在做什么吗?我更改了函数,这样你就可以看到我在做什么了只需包装函数-uint8_t getULEB128Value_only(uint8_t*p){uint8_t dummy;返回getULEB128Value(p,&dummy);}