我的任务是根据A和B中包含n个元素的值制作2dn二维数组。
我发现了这种为2D数组分配内存的方法,它可以工作,但是我不知道它是否正确或为什么正确
int **tab2D(int A[],int B[],int n)
{
int **newTab = malloc(n*sizeof(int*));
newTab[0] = A;
newTab[1] = B;
return newTab;
}
我知道还有其他方法可以做到这一点,但我对此感到很好奇。
答案 0 :(得分:0)
据我了解您的代码,它应该像这样工作。
package aShot;
import java.io.File;
import javax.imageio.ImageIO;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import ru.yandex.qatools.ashot.AShot;
import ru.yandex.qatools.ashot.Screenshot;
public class ashot_google_homepage_logo {
public static void main(String[] args) throws Exception {
System.setProperty("god.bless.you", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.addArguments("disable-infobars");
options.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(options);
driver.get("https://jquery.com/");
WebElement myWebElement = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//h3[contains(.,'Lightweight Footprint')]")));
Screenshot myScreenshot = new AShot().takeScreenshot(driver, myWebElement);
ImageIO.write(myScreenshot.getImage(),"PNG",new File("./Screenshots/elementScreenshot.png"));
driver.quit();
}
}
可以看作
int **tab2D(int A[],int B[],int n)
,因此您将指针传递给已经分配的两个数组。 然后,您为指针到指针分配一些内存
int **tab2D(int *A,int *B, int n)
我认为应该是
int **newTab = malloc(n*sizeof(int*));
相反,我假设因为您有 int **newTab = malloc(2*sizeof(int*));
和A
,它们的长度均为B
,所以长度相同。然后,取消引用新的指向指针的指针,并将指针分配给数组
n
可以写为
newTab[0] = A;
newTab[1] = B;
答案 1 :(得分:0)
这不是int
的2D数组,而是指向int
的指针的数组。
之所以有效,是因为数组的每个元素都指向一个包含int
s数组的地址
使用堆栈的类似代码,只是为了说明其工作原理:
int a[] = {1, 2};
int b[] = {3, 4};
int *arr[] = {a, b};
一个真实的2D数组应该可以在连续区域中工作(没有碎片),您可以使用指向VLA的指针来实现此目的:
int rows, cols;
scanf("%d %d", &rows, &cols);
int (*arr)[cols] = malloc(sizeof(int [rows][cols]));