指向本地指针数组的全局指针

时间:2017-01-02 03:55:24

标签: c arrays pointers

我在一个函数中有一个指向数组的指针数组。我需要在另一个函数中访问该数组。

指针数组

android:height="70dp"

我做了一个全局指针

21

我指向ptr(与ptr的功能相同)

char *ptr[size + 1];

然后我试图从其他函数访问ptr

char *p;

何时

p = *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)这里出了什么问题。 (1)我如何解决它(2)或者有更好的方法来做到这一点。要求是0 abcd 1 bcd 2 cd 3 d 4 5 不能接受任何参数, 0 abcd 1 bcde 2 cdef 3 defg 4 efgh 5 fghi 需要保持其功能的本地。 (我确定其他代码没有导致问题,otherfunction()

没有任何问题

3 个答案:

答案 0 :(得分:3)

ptr是一个指针数组。

char **p = ptr;

char *str = p[n];
printf("%i %s\n", n, str);

答案 1 :(得分:2)

  

char *ptr[size + 1];

     

char* p = *ptr;

     

char* str = &p[n];

这使得p指向ptr字符串数组的第一个字符串,然后str将逐个字符地迭代该字符串。我认为你的意思是:

char** p = ptr; // p points to the first string of ptr
...
char* str = p[n]; // str points to the nth string of ptr

除此之外,使用全局指针并不是一个好主意。可能更好的方法是将ptr本身传递给函数otherFunction,该函数将具有原型:

void otherFunction(char** p);

您可以使用ptr调用它:

otherFunction(ptr);

答案 2 :(得分:1)

  

(0)这里出了什么问题。 (1)我如何解决它(2)或者有更好的方法来做到这一点

(0)整个程序设计。使用像这样的全局变量 - 特别是指针 - 是意大利面条编程的一种形式,应该避免使用。您正在程序中创建各种不相关部分之间的紧密耦合和依赖关系。

通常,指向指针的存在通常表示设计不佳。对于特殊情况,例如通过函数参数返回修改的指针,指针指针有一些有效的用途。没有明显的理由在你的情况下使用它们。

(1)通过使用几个类型限定符和存储说明符来减少那些混乱的全局变量的范围。相反,通过setter / getter函数访问指针数组。

(2)是的,将程序更改为类似下面的代码:

static const char* ptr [] =
{
  "abcd",
  "bcde",
  "cdef",
  "defg",
  "efgh",
  "fghi",
  NULL
};

inline const char* get_str (size_t index)
{
  return ptr[index];
}

inline void set_str (size_t index, const char* str)
{
  ptr[index] = str;
}