如何在C中访问由Double指针表示的2D数组的元素作为1D数组

时间:2016-04-13 20:18:51

标签: c arrays pointers

假设我有一个由双指针表示的填充整数2D数组。我尝试访问这样的元素(这只是代码的一部分):

int **array;

while (i<arraysize) {
    printf("array[%d] = %d", i, array+i);
}

我知道在内存中,2D数组基本上存储为1D数组。如何在不使用嵌套for循环的情况下打印所有元素?

1 个答案:

答案 0 :(得分:2)

是的,C 2D阵列是一个数组数组。 C数组由在内存中连续布局的元素组成,因此2D数组的(数组)成员在内存中是连续的,并且它们自己的元素在它们内部是连续的,因此整体布局与1D数组的布局一致。

但是你提出的不是2D数组,也不是指向一个数组的指针,也不是一个与之相容的指针。你的是指向namespace Assignment_6_third_attempt { public partial class InterestForm : Form { private SavingsAccount savingsAccount = new SavingsAccount(); //private double accountBalance; public InterestForm() { InitializeComponent(); } public InterestForm(double accountBalance) { accountBalance = savingsAccount.AccountBalance; InitializeComponent(); } private void addInterestButton_Click(object sender, EventArgs e) { CalculateInterest(); // this.Close(); } public void CalculateInterest() { //A = P(1 + rt) double accountBalance = savingsAccount.AccountBalance; double interestRate = double.Parse(interestUpDown.Text); double term = double.Parse(termUpDown.Text); double estimateInterest = (accountBalance * (1 + (interestRate * term))); estimateTextBox.Text = estimateInterest.ToString("C"); } } } 指针的指针。这样的指针可能指向int数组的第一个元素,但如果程序员在某处直接或间接地在不兼容的指针类型之间执行转换,则它只指向2D数组中的任何位置。直接转换应该引发警告,但是通过int *中间件,间接转换可能会干净地编译,即使警告转为11。

C 2D阵列的声明具有以下形式:

void *

在大多数情况下,这样的数组会衰减为这种类型的指针:

int array_2d[4][2];

直接回答你的问题,

  

如何在不使用嵌套for循环的情况下打印所有元素?

你不能。您的数据不是为此而构建的。