Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
我正在学习C语言中的指针-专门针对此问题,指向指针的指针和通用指针。
我有以下代码
对于数组的前2个元素,它工作正常,但对于
预期的输出将是将数组的所有元素打印在每个字符之间并留有空格。
当i = 0时,gpp = gpp
当i = 1时,gpp = gpp +1-gpp现在已修改(gpp-> word [1])
当i = 2时,gpp = gpp + 2
解决方案是使用临时变量而不是修改gpp。
想改善这个问题吗? 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