我想在函数内部分配一个数组,并且能够在其外部使用指向该数组的指针。我不知道我的代码有什么问题
#include <stdio.h>
#include <stdlib.h>
void alloc_array (int **v, int n)
{
*v=(int *)calloc(n,sizeof(int));
printf ("the address of the array is %p",v);
}
void display_pointer (int *v)
{
printf ("\n%p",v);
}
int main()
{
int *v;
alloc_array(&v,3);
display_pointer(v);
return 0;
}
我希望在printf
中获得相同的地址,但事实并非如此。我的错是什么?
答案 0 :(得分:3)
void alloc_array (int **v, int n)
{
*v = calloc(n,sizeof(int));
printf("the address of the array is %p", *v);
// ----^
}
请注意printf
来电中的其他明星。
另外,请勿投放malloc
/ calloc
的返回值。
答案 1 :(得分:1)
v
中的 alloc_array
包含指针变量的地址。该变量在v
中为main()
。
你不关心它。因为它不会改变。但是v
中main
的内容会。
您应该打印*v
,但为什么?
因为v
中alloc_array
的内容包含您分配的内存的地址。
但display_pointer
不需要这个。因为在这里传递指针变量本身,并且中函数的本地副本将包含您分配的内存地址。
答案 2 :(得分:1)
在此代码段中
package testscripts;
public class ExecutableLeadTest {
public static void main(String[] args) throws Exception {
ArrayList a = new ArrayList();
FileInputStream file = new FileInputStream("D:\\LeadSuite.xlsx");
XSSFWorkbook b = new XSSFWorkbook(file);
Sheet s = (Sheet) b.getSheet("Teststeps");
Iterator itr = s.iterator();
while (itr.hasNext()) {
Row rowitr = (Row) itr.next();
Iterator cellitr = rowitr.cellIterator();
while (cellitr.hasNext()) {
Cell celldata = (Cell) cellitr.next();
}
}
Cell Celldata;
switch (Celldata.getCellType()) {
case Cell.CELL_TYPE_STRING:
a.add(Celldata.getStringCellValue());
break;
}
}
{
for (int i = 0; i < a.size(); i++) {
if (a.get(i).equals("KOHILA")) {
System.out.println(a.get(i));
System.out.println(a.get(i + 1));
}
}
}
}
函数int *v;
alloc_array(&v,3);
display_pointer(v);
接受变量(指针)alloc_array
的地址,并在函数中输出该地址
v
另一方面,函数printf ("the address of the array is %p",v);
接受存储在变量display_pointer
中的值,并且该值在函数内输出
v
在函数printf ("\n%p",v);
中再添加一条语句,您将看到差异
alloc_array