簡體   English   中英

在C中動態分配的2d數組

[英]dynamically allocated 2d array in C

在為字符創建2d數組時需要一些清晰度。 我知道

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就可以工作,並且我可以訪問每個字符。

char *str;

為一個指針分配足夠的字節,它希望在以后的某個時間用一個字符的地址填充(可能是序列的第一個,並且可能通過動態分配內存)。

char *str = "hello";

分配指針,還為字符串“ hello”及其終止的0字節分配6字節的緩沖區(可能在只讀存儲器中),並使指針指向它。

我不知道您的意思是“沒有任何內存分配”。

char *str[5];

為五個連續的指針分配一個內存塊,它預期將在以后的某個時間填充。 這是二維數組嗎? 否,盡管如果您恰巧為每個指針分配了一個字符序列的地址, str[x][y]將訪問第x個字符串的第y個字符,使其看起來像2d數組。

 char *str[5] 

應該能夠對每個元素執行相同的操作

這是絕對正確的: str的五個元素中的每一個都可以指向一個字符串。

  1. char *str[5]是2D字符數組嗎?

否。它是一維字符指針數組。 您可以將其視為2D數組,但是可以靈活選擇是否填寫某些尺寸。

  1. 在這種情況下,何時需要使用malloc和free?

這取決於您要在str[5]元素中添加什么,以及是否要修改這些內容。 如果將字符串文字放在所有五個元素中,則根本不需要malloc ,但是擁有的字符串將不允許修改。

  1. 我知道我可以像在2d整數數組中那樣為malloc創建一個循環,但是有一點嗎?

同樣,這取決於您要實現的目標。 您可以使用一個循環來動態分配內存,可以使用字符串文字,使用指針來靜態分配可修改的字符串,以及可以使用字符指針進行的其他操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM