C 字符指针数组和2D数组之间有什么区别?
字符指针数组和2D数组之间有什么区别C 字符指针数组和2D数组之间有什么区别?,c,arrays,C,Arrays,字符指针数组和2D数组之间有什么区别 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* 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!!
表示字符串数组
int my_grid_of_ints[][];
char my_block_of_text[][];
如果color=byte[3]
则可以表示屏幕监视器
color my_pixel_buffer[][] = new color[768][1024];
是一个二维数组。如您所见,2D数组可以表示任何内容,包括一个字符指针数组(如多行字符串)。您可以使用相同的语法访问元素,但关于内存布局的保证有很大不同。二维数组是连续的。指针数组不可用 数组(也称多维数组)看起来像(在内存中): 指针数组如下所示:
p[0], p[1], ..., p[m-1]
每个插槽都是指针,可以指向任何对象。如果它们都指向每个元素都有
n
的数组,那么p[i][j]
和a[i][j]
可以在表达式中类似地使用,但它们实际上是完全不同的对象。pasz是如何变成psz的,asz是如何变成sz的?@删除数组的一维[]
失败了。(char*[]
到char*
和char[][]
到char[]
这样想要容易得多——它们基本上是一样的,除了在第一个代码片段中,我们还有另一个复杂性维度。出于教学目的,我删除了这种复杂性代码>不是有效的声明,这里的列索引是必需的。了解这一点的一个很好的资源是这样的:在看到muntoo的答案后,我不确定我是否误解了你。如何理解int my_ints[]代码>二维数组?我的语法错误吗?对不起,我从来没有用过C,只有C++。而且,已经有一段时间了——我已经习惯了C!Aint my_ints[]代码>将是2D。它在C++中是一样的。(我是C++程序员,所以我的C技能也不太好。)这也意味着您可以使用memcpy()和前者的类似函数,但不能在后者上使用。此外,不能在二维数组(数组数组数组)和指针之间强制转换。
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]