【发布时间】:2017-04-11 19:24:29
【问题描述】:
在为字符创建二维数组时,我需要一些清晰的认识。 这个我知道
char *str="hellowww";//here its a constant string
str 可以指向“hellowwww”字符串,无需任何内存分配。 所以
char *str[5]
应该能够对每个元素做同样的事情。 所以如果是这样的话,
1) char *str[5] 是二维字符数组吗?
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 即可运行,我可以访问每个字符。
【问题讨论】:
-
1)。不,它是一个指针数组。 2)。如果您想动态分配内存,可能是为了存储一些用户输入或让“数组”内容存在于分配范围之外。 3)。我不会撒谎,我不知道你在问什么,你能澄清一下吗?
-
没有动态内存分配。
-
另请注意,上述程序将允许您访问(即读取)所有字符,但不允许您编写它们,因为字符串文字是不可变的。