Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以将指针数组作为';int';参数是否将地址转换为整数? 初学者C++程序员,编写代码解决数独难题。我会保持背景信息简短以避免混淆_C++_Pointers_Parameters_Type Conversion - Fatal编程技术网

可以将指针数组作为';int';参数是否将地址转换为整数? 初学者C++程序员,编写代码解决数独难题。我会保持背景信息简短以避免混淆

可以将指针数组作为';int';参数是否将地址转换为整数? 初学者C++程序员,编写代码解决数独难题。我会保持背景信息简短以避免混淆,c++,pointers,parameters,type-conversion,C++,Pointers,Parameters,Type Conversion,我有一个指针数组,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<iostre

我有一个指针数组,
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]);
}
#包括
使用名称空间std;
无效赋值框(整数矩阵[],整数P[])
{

cout如果你取消引用
int*[]
(或
int**
),你会得到一个
int*
。如果你取消引用一个
int*
,你会得到一个
int
。这正是你正在做的,也是为什么你最终会得到一个
int

//main
int *P[1]; //Array of pointers to int
int *B[81]; //Array of pointer to int
assign_box(B[81], P[9]); //Pass in two pointers to int

//assign_box
matrix[0]=P[0]; //assign int to int
您可能打算调用
assign\u box
类似于
assign\u box(B,p)
,并将签名设置为
void assign\u box(int*B[],int*p[]);
。这样可以将数组中的一个指针指定给数组中的另一个指针


有多种因素可能导致分段错误,但它们都源于无效的数组索引。如果数组声明为
类型标识符[size];
,则它的有效索引从
0
size-1
。因此,
int*B[81];
表示
B[81]
无效。

您传入了错误的参数。您试图传入一个不存在的数组对象B[81]。您只有B[0]-B[80]。此外,B[80]不是int指针。它是int数组中的int。p[9]是指向整数数组的指针。因此,您试图将数组槽中不存在的整数传递到不接受整数的参数中—它接受整数数组

#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]); // WRONG

}
#包括
使用名称空间std;
无效赋值框(整数矩阵[],整数P[])
{

请提供一个我不清楚的数组是
int
还是
int*
,还是两者的组合。数组都是int*,正如我初始化为:int*B[81]那么为什么你的函数使用
int
数组?
void(int B[],int P[])
我的编译器告诉我,如果我没有类型,变量是“声明为void”,如果我使用“void(*B[],*P[]),它告诉我B和P没有在这个范围内声明。非常感谢您的帮助,这解决了我所有的问题。调用
B[81]
是主要问题,事后看来,这是一个相当愚蠢的错误。感谢您的快速反馈。