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的概念不适用于指针。如果向指针写入多个数据,通常会为每个值递增指针,因此实际上除了指针后面的第一个值之外,其他值都会写入。由于指针算术定义良好,因此不可能有“不在乎”的值指针。

你真正想做什么?A
sizeof(*ptr)
做作业你基本上是在结果中返回指针的大小(4或8),在值中返回垃圾。你确定你明白你在做什么吗?我更改了函数,所以你会看到我在做什么只需包装函数-
uint8\t getULEB128Value\u(uint8\t*p){uint8_t dummy;return getULEB128Value(p,&dummy);}
您真正想做什么?A
sizeof(*ptr)
您基本上返回指针的大小(4或8)在结果中,垃圾在值中。你确定你明白你在做什么吗?我更改了函数,这样你就可以看到我在做什么了只需包装函数-
uint8_t getULEB128Value_only(uint8_t*p){uint8_t dummy;返回getULEB128Value(p,&dummy);}