我需要清楚地为角色创建一个二维数组。 我知道这个
char *str="hellowww";//here its a constant string
str可以指向“hellowwww”字符串,没有任何内存分配。 所以
char *str[5]
应该能够为每个元素做同样的事情。 所以如果是这样的话,
1)char * str [5]是2d字符数组吗?
2)在这种情况下我们什么时候需要使用malloc和free?
3)我知道我可以像在2d整数数组中那样为malloc创建一个循环,但是有一点吗?
#include <stdio.h>
#include <string.h>
int main(void)
{
char *arr[6];
int i, j;
arr[0] = "hurr1";
arr[1] = "hurr2";
arr[2] = "hurr3";
arr[3] = "hurr4";
arr[4] = "hurr5";
arr[5] = "hurr6";
for(i = 0; i < 6; i++)
{
for(j = 0; j<strlen(arr[i])+1;j++)
printf("%c", arr[i][j]);
printf("\n");
}
}
以上程序只运行没有任何malloc或free,我可以访问每个角色。
答案 0 :(得分:1)
char *str;
为指针分配足够的字节,它稍后会在字符的地址中填充(可能是序列的第一个,也可能是动态分配内存)。
char *str = "hello";
分配指针,并为字符串&#34; hello&#34;分配一个6字节的缓冲区(可能在只读存储器中)。及其终止0字节,并使指针指向它。
我不知道你的意思&#34;没有任何内存分配&#34;
char *str[5];
为五个连续指针分配一块内存,它预计将在稍后的时间填充。这是一个2D阵列吗?不,虽然如果您碰巧为每个指针指定了一系列字符的地址,str[x][y]
将访问y
字符串的x
字符,使其看起来像2d阵列。
答案 1 :(得分:1)
char *str[5]
应该能够为每个元素做同样的事情
这是绝对正确的:str
的五个元素中的每一个都可以指向一个字符串。
- 醇>
char *str[5]
是否为二维字符数组?
没有。它是一维字符指针数组。您可以将其视为二维数组,但如果您愿意,可以灵活地填写一些维度。
- 在这种情况下我们什么时候需要使用malloc和free?
醇>
这取决于您希望将哪些内容添加到str[5]
的元素中,以及您是否要修改这些内容。如果你将字符串文字放在所有五个元素中,你根本不需要malloc
,但你拥有的字符串不允许修改。
- 我知道我可以为
醇>malloc
创建一个循环,就像我们在2d整数数组中那样,但是有一点吗?
同样,这取决于你想要达到的目标。你可以有一个动态分配内存的循环,你可以使用字符串文字,使用指向静态分配的可修改字符串的指针,以及你可以用字符指针做的任何其他事情。