char指针数组和2D数组之间有什么区别?

时间:2011-10-21 03:52:14

标签: c arrays

char指针数组和2D数组之间有什么区别?

4 个答案:

答案 0 :(得分:3)

char* pasz[3] = {"abc", "def", "ghi"};
char asz[3][] = {"abc", "def", "ghi"};

这两者之间的相同点和差异基本相同:

char *psz = "jkl";
char sz[] = "jkl";

第一个是最初只读。

psz[0] = 'a'; // Illegal!!

第二,你可以修改,因为你用[]分配它。

sz[0] = 'b';
// sz == "bkl"

首先,您可以修改它指向的内容:

char mysz[] = "abc";
psz = mysz;

psz[0] = 'b';
// mysz == "bbc"

第二,你不能:

sz = mysz; // Can't assign an array to an array!!

答案 1 :(得分:2)

char* my_string[];

表示字符串数组。

int my_grid_of_ints[][];
char my_block_of_text[][];

如果color = byte[3]那么您可以代表您的屏幕监视器

color my_pixel_buffer[][] = new color[768][1024];

是一个2D数组。如您所见,2D数组可以表示任何内容,包括一个char指针数组(例如多行字符串)。

答案 2 :(得分:1)

您可以使用相同的语法访问元素,但有关内存布局的保证会有很大不同。 2d阵列是连续的。指针数组不是。

答案 3 :(得分:0)

数组(也称为多维数组)看起来像(在内存中):

a[0][0], a[0][1], a[0][n-1], a[1][0], a[1][1], ..., a[1][n-1], ..., a[m-1][n-1]

指针数组如下:

p[0], p[1], ..., p[m-1]

其中每个槽都是一个指针,可以指向任何东西。如果它们碰巧指向每个都有n元素的数组,那么p[i][j]a[i][j]可以在表达式中类似地使用,但它们实际上是完全不同的对象。