【发布时间】:2015-11-21 23:22:41
【问题描述】:
初级 c++ 程序员,编写代码来解决数独难题。为了避免混淆,我会尽量简短地介绍背景信息。
我有一个指针数组int *P[9],我为每个条目分配了一个特定的地址。我想将这些地址分配给另一个指针数组int *B[81]。
P[0]应该对应B[0],P[1]对应B[8]等等。
当我将这些传递给函数时:
void (int B[ ], int P[ ] ) {...}
该函数似乎正在将地址P[ ] 指向的地址转换为整数值。在调用函数之前P[0] 指向地址0x7fff978d46b0,如果我检查函数内部P[0] 的值,它是一个类似于`48782346 的数字。
#include<iostream>
using namespace std;
void assign_box(int matrix[], int P[])
{
cout << "P[0] in function: " << P[0] << "\n";
matrix[0]=P[0];
}
int main()
{
int table[9][9];
//Initialise table entries to 0
for(int i=0; i<9; i++)
{
for(int j=0; j<9; j++)
{
table[i][j]=0;
}
}
//Assign addresses to vector P, for brevity P is of length one
int *P[1];
P[0]=&table[0][0];
cout<< "P[0] before function: " << P[0] << "\n";
int*B[81];
assign_box(B[81], P[9]);
}
如果它这样做并且有效,我不会在意,但不幸的是,当我分配 B[0] = P[0] 时,它给我一个 Segmentation fault (core dumped),这让我想知道该函数试图将指针 B[0] 分配给地址48782346。
函数是否可以将地址转换为整数值?
抱歉,如果我的问题不清楚或冗长,第一次提问。并感谢您的编辑。
【问题讨论】:
-
我不清楚这些数组是
int还是int*,还是两者的某种组合。 -
数组都是 int*,正如我初始化为:int*B[81]
-
那为什么你的函数使用
int数组呢?void (int B[ ], int P[ ] ) -
如果我没有类型,我的编译器告诉我变量是'declared void',如果我使用'void(* B[],*P[])'它告诉我B和P不是在此范围内声明
标签: c++ pointers parameters type-conversion