[英]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.