将指向函数的指针数组作为"int"参数传递是否可以将地址转换为整数?
Can passing an array of pointers to a function as an 'int' parameter convert the addresses to integers?
初级c++程序员,编写代码解决数独难题。我会把背景信息简短一些,以免混淆。
我有一个指针数组int *P[9]
,我为每个条目分配了一个特定的地址。我想将这些地址分配给另一个指针数组int *B[81]
。
P[0]
应与B[0]
、P[1]
与B[8]
相对应,依此类推
当我把这些传递给一个函数时:
void (int B[ ], int P[ ] ) {...}
该函数似乎正在将CCD_ 7所指向的地址转换为整数值。在函数被调用之前,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*
,你得到的是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_box(B, P)
一样调用assign_box
,并使签名为void assign_box(int *B[], int *P[]);
。这样就可以将数组中的一个指针分配给数组中的另一个指针。
有多种因素可能导致分割错误,但它们都源于无效的数组索引。如果一个数组被声明为类似于type identifier[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
}
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 是否通过向封闭对象的地址添加字节偏移量来访问子对象
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- c++ 编译器是否保护常量内存地址免受任何更改?
- 模板到函数的时刻地址是否可以作为指向某个函数的函数指针传递?
- 内存地址是否由于未对齐的内存地址而损坏?
- 在 C/C++ 中,是否可以通过使用指针更改"important"内存地址的值来创建简单的恶意软件?
- 通过引用传递是否涉及复制地址
- 是否可以在运行时为宏分配地址
- 初始化值是否保证通过其自己的地址反映,而不考虑内存顺序
- 对象地址是否保证是其类型对齐的倍数
- C++中是否有一个函数可以为您获取指向该节点的所有指针的地址空间
- 使用全局 IP 地址时,C++ winsock 2 应用程序中的代码是否必须更改?
- 是否可以在C++中更改带有指针的变量的地址
- 使用成员的地址初始化基类是否合法?
- 类实例的地址是否等于类中唯一元素的地址
- 此示例是否应该更改内存地址而不是该内存地址的值?
- 在某些情况下,指针的地址是否会更改
- 获取未初始化对象成员的地址是否定义良好?