正如你所知,VLA(变长数组)有其优缺点,而在C11中它们是可选的。
我认为将 VLA 设为可选的主要原因是:"栈可能会溢出":
int arr[n]; /* where n = 1024 * 1024 * 1024 */
但是,关于指向VLA的指针呢?
int m, n;
scanf("%d %d", &m, &n);
int (*ptr)[n] = malloc(sizeof(int [m][n]));
在这种情况下,没有炸堆栈的风险,并且我认为它们非常有用。
我的问题是:
委员会是否可以保留对VLA的指针,使得将VLA转换为非指针类型成为可选项?
还是一个事情意味着另一个事情?
(请原谅我的英语不好)
n
еЅ±е“Ќдє†еЇ№ptr
жЊ‡й’€иї›иЎЊжЊ‡й’€з®—жњЇиїђз®—зљ„ж–№ејЏпјЊе®ѓз»ќеЇ№дёЌиѓЅиў«еїЅз•ҐгЂ‚ - StoryTeller - Unslander Monicaptr + x
必须等于(char*)ptr + x * (sizeof(int[n]))
,这是通常的指针算术运算。如果行大小是一个常量表达式,那么它和这个公式是一样的。但在这种情况下,行大小不是常量表达式。 - StoryTeller - Unslander Monicaptr[i][j]
将寻址一个单独的整数。 - StoryTeller - Unslander Monica