C++中如何用指针输入二维数组及对应指针赋值语句的运行原理
代码行
*(ptr + (i*c) + j)=k;运行逻辑 前置背景
你这段代码是把二维数组按行优先展平为一维内存空间来操作的,C/C++中无论二维数组是静态声明还是动态分配,其元素在内存中都是连续线性存储的,默认采用行优先的排布规则(即先存完第一行所有元素,再依次存第二行、第三行的元素)。
逐部分拆解逻辑
ptr是传入的二维数组首元素指针,初始指向矩阵第0行第0列([0][0])的内存地址i是当前遍历的行索引,c是矩阵总列数:i*c计算的是前i行所有元素的总数量,ptr + i*c就得到了第i行第一个元素的内存地址j是当前遍历的列索引:ptr + i*c + j就精准对应了矩阵第i行第j列([i][j])元素的内存地址- 最外层的
*是指针解引用操作:表示对刚才计算得到的[i][j]元素的内存地址进行写入操作,把用户输入的k值存入该内存空间,等价于常规二维数组写法的arr[i][j] = k
额外注意
你当前代码里存在一个小问题:内层遍历列的循环条件写的是j<r,这里r是总行数,应该改为j<c才对,否则当矩阵行数和列数不一致时,会出现内存越界或者赋值错位的问题。
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

