Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        2年前关闭。
                                                                                            
                
        
我正在学习C语言中的指针-专门针对此问题,指向指针的指针和通用指针。

我有以下代码

void genericPointers()
{
    char* words[4];     // some strings
    void *gp; //this is the generic pointer - it needs to be casted

    // initialize our string array
    words[0] = "zero";
    words[1] = "one";
    words[2] = "two";

    void **gpp;
    (char**)gpp = words;
    (char *)gp = *gpp;

    for (size_t i = 0; i < 3; i++)
    {
        (char**)gpp = (char **)gpp + i;
        (char *)gp = *(char**)gpp;

        while (*(char*)gp != 0)
            printf("%c ", *((char *)gp)++);
        printf("\n");
    }
}


对于数组的前2个元素,它工作正常,但对于words[2]gpp在上次迭代中未正确递增,并且加载了[0xcccccccc],并且出现了(访问冲突)异常。有人可以解释第一个words[0]words[1]没问题吗,但不能解释吗?

预期的输出将是将数组的所有元素打印在每个字符之间并留有空格。

最佳答案

代码有很多问题,您在编译代码时是否启用了警告?除了所有警告之外,您的问题的答案是您正在增加指针,使其超出所需数量。

 (char**)gpp = (char **)gpp + i;



  当i = 0时,gpp = gpp
  
  当i = 1时,gpp = gpp +1-gpp现在已修改(gpp-> word [1])
  
  当i = 2时,gpp = gpp + 2

解决方案是使用临时变量而不是修改gpp。

关于c - 数组的最后一个元素中的通用指针访问冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51136494/

10-11 16:31