char指针数组和2D数组之间有什么区别?
答案 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]
可以在表达式中类似地使用,但它们实际上是完全不同的对象。