繁体   English   中英

指向2D数组的指针

[英]pointers to 2D arrays

我有一个像这样的二维数组...

char a[][20]={"Hi","Hello","Bye","Good Morning"};

现在我需要一个char指针来引用此数组,通过指针修改数组中的字符串之一,并通过指针打印修改后的数组和数组...

对数组的修改:

    strcpy(p+1,"Come");//copy string "Come" to array

    a[1][1]='O';//copy char 'O' index [1][1] 

即..预期输出:

Array:嗨,科米,再见

指针:嗨,科米再见

我在将指针分配给该数组并通过指针打印数组时遇到问题,请帮助...

如果要将2D数组转换为char指针的指针数组,则必须在本地范围内或动态地为堆栈上的char**分配空间。 如果使用局部范围方法,则只需创建一个char*数组,然后使数组的每个成员指向每个字符串,如下所示:

char a[][20]={"Hi","Hello","Bye","Good Morning", "" };

int total_strings = 0;
int index = 0;
while(strlen(a[index++])) total_strings++;

char* ptrs[total_strings];

for (int i = 0; i < total_strings; i++)
{
    ptrs[i] = a[i];
}

现在,您可以使用指针数组,例如ptr[i][j] (其中j小于索引i处的字符串的长度),如果需要通过引用将其传递给函数或将其分配给另一个变量,则ptrs数组会衰减为一个指针,因此您可以将ptrs作为char**传递给函数或另一个char**变量。

下一种方法是指针数组的动态分配……如下所示:

char a[][20]={"Hi","Hello","Bye","Good Morning", "" };

int total_strings = 0;
int index = 0;
while(strlen(a[index++])) total_strings++;

//dynamic allocation of string pointer array 
char** ptrs = calloc(total_strings, sizeof(char*));

for (int i = 0; i < total_strings; i++)
{
    ptrs[i] = a[i];
}

//...more code
free(ptrs);

顺便说一句,您不能做像char** ptr = a ...那样简单的事情,这是因为C希望布局char**的内存的方式。 换句话说, char array[][]实际上是内存中的线性数组,即使可以将其索引为二维数组也是如此。 另一方面, char** ptr是一个变量,它包含一个指向指针数组的内存地址。 因此,两个ptr都必须包含一个指向正确的指针数组的地址,并且每个指针ptr[i]必须包含一个指向char数组的地址。 做像char** ptr = a这样的简单操作并不能创建适当的内存布局。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM