【发布时间】:2017-01-02 03:55:24
【问题描述】:
我在一个函数中有一个指向数组的指针数组。我需要在另一个函数中访问该数组。
指针数组
char *ptr[size + 1];
我做了一个全局指针
char *p;
我指向ptr(与ptr在同一个函数中)
p = *ptr;
然后我尝试从另一个函数访问 ptr
void otherFunction(void){
for(int n = 0; n < 6; n++)
{
char* str = &p[n];
printf("%i %s\n", n, str);
}
}
当
ptr[0] = "abcd"
ptr[1] = "bcde"
ptr[2] = "cdef"
ptr[3] = "defg"
ptr[4] = "efgh"
ptr[5] = "fghi"
otherfunction(); 的输出是:
0 abcd
1 bcd
2 cd
3 d
4
5
我希望输出是
0 abcd
1 bcde
2 cdef
3 defg
4 efgh
5 fghi
我的问题是:(0)这里出了什么问题。 (1)我该如何解决它(2)或者有更好的方法来做到这一点。要求是 otherfunction() 不能接受任何参数,ptr 需要保持其功能的本地性。 (我确定其他代码不会导致问题,ptr 也没有问题)
【问题讨论】:
-
p = *ptr;dereferencesptr和说p = ptr[0];相同 -
你知道你可以传递参数,不是吗?
-
应该注意,全局指针很少是一个好主意,尤其是当您要将它们指向局部变量时。函数完成后,堆栈将被清理,然后您将获得未定义的行为。
-
@Goodies 这只是一个简单的场景,这将是一个坏主意,全局指针几乎在任何情况下都不好。此外,除了使用全局变量之外,总有一种解决方案,它们总是比使用全局变量更好的解决方案,所以我建议尽可能避免使用全局变量,即使它听起来太激烈了。当然,这个评论主要是针对 OP 的。
-
@Goodies
p = ptr;会出错