将指针数组传递给函数 C
Passing array of pointers to a function C
我正在将一个指针数组传递给一个函数并修改它们,但它们发生了意外变化。
这是我的主要功能:
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int x;
int y;
}enemy;
void main() {
enemy* array[5];
function(array);
}
这个函数不起作用:
void function(enemy* arr[]){
int b;
for(b=0;b<5;b++)
arr[b]=(enemy*)malloc(sizeof(enemy));
for(b=0;b<5;b++){
arr[b]->x=b;
arr[b]->y=b*16;
printf("%d %d, ", arr[0]->x, arr[0]->y);
}
}
每次我调用printf
数组的第一个指针改变它的值,我不知道为什么。
printf 打印:“0 0、1 16、2 32、3 48、4 64”。它不应该一直打印“0 0”吗?这正是我所期望的。
以下是我用来测试的你的代码版本:
#include <stdlib.h>
#include <stdio.h>
typedef struct
{
int x;
int y;
}enemy;
void function(enemy* arr[]);
int main( void )
{
enemy* array[5];
function(array);
}
void function(enemy* arr[])
{
int b;
for(b=0;b<5;b++)
arr[b]=(enemy*)malloc(sizeof(enemy));
for(b=0;b<5;b++){
arr[b]->x=b;
arr[b]->y=b*16;
printf("%d %d, ", arr[0]->x, arr[0]->y);
}
}
注意:最后的 printf() 总是输出数组中的第一个条目
结果是:
0 0, 0 0, 0 0, 0 0, 0 0,
我改变了什么?
1) corrected the return type from main()
2) prototyped the `function()` function.
每次调用函数?你是说你调用了不止一次?
如果是这样,函数将在每次调用时替换 arr 中的所有指针。将 malloc 循环移动到 main,然后根据需要调用函数
我正在将一个指针数组传递给一个函数并修改它们,但它们发生了意外变化。 这是我的主要功能:
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int x;
int y;
}enemy;
void main() {
enemy* array[5];
function(array);
}
这个函数不起作用:
void function(enemy* arr[]){
int b;
for(b=0;b<5;b++)
arr[b]=(enemy*)malloc(sizeof(enemy));
for(b=0;b<5;b++){
arr[b]->x=b;
arr[b]->y=b*16;
printf("%d %d, ", arr[0]->x, arr[0]->y);
}
}
每次我调用printf
数组的第一个指针改变它的值,我不知道为什么。
printf 打印:“0 0、1 16、2 32、3 48、4 64”。它不应该一直打印“0 0”吗?这正是我所期望的。
以下是我用来测试的你的代码版本:
#include <stdlib.h>
#include <stdio.h>
typedef struct
{
int x;
int y;
}enemy;
void function(enemy* arr[]);
int main( void )
{
enemy* array[5];
function(array);
}
void function(enemy* arr[])
{
int b;
for(b=0;b<5;b++)
arr[b]=(enemy*)malloc(sizeof(enemy));
for(b=0;b<5;b++){
arr[b]->x=b;
arr[b]->y=b*16;
printf("%d %d, ", arr[0]->x, arr[0]->y);
}
}
注意:最后的 printf() 总是输出数组中的第一个条目
结果是:
0 0, 0 0, 0 0, 0 0, 0 0,
我改变了什么?
1) corrected the return type from main()
2) prototyped the `function()` function.
每次调用函数?你是说你调用了不止一次?
如果是这样,函数将在每次调用时替换 arr 中的所有指针。将 malloc 循环移动到 main,然后根据需要调用函数