在函数 C 中创建并填充动态数组
Create and fill a dynamic array within function C
我需要扫描 n
个数字,然后用以下扫描的 n
个数字填充一个数组。我必须在函数中同时使用 n
和数组输入以及使用动态内存。
void input(int* buff, int* n);
int main() {
int* data = NULL;
int n;
input(data, &n);
for (int i = 0; i < n; ++i) {
printf("%d ", data[i]);
}
return 0;
}
void input(int* buff, int *n) {
if (scanf("%d", n) == 1 && getchar() == '\n') {
if (*n <= 0) {
error = 1;
}
}
if (error == 0) {
buff = (int*)calloc(*n, sizeof(int));
if (buff == NULL) {
error = 1;
}
}
if (error == 0) {
int count = 0;
int p;
for (int i = 0; i < *n; i++) {
if (1 == scanf("%d", &p)) {
if (count < *n) {
*(buff + count) = p;
count++;
}
}
}
for (int i = 0; i < *n; i++) {
printf("%d, ", *(buff + i));
}
}
我没有在第一个 for
中插入程序的所有逻辑,因为它并不重要。
最后一个 for
打印了正确的元素,但是我有一个关于空指针的警告。
当我 return 到 main
并尝试打印时,我遇到了有关禁止读取访问的错误。
我哪里做错了?
当您更改 input
中的 buff
时,main
中的 data
不会更改。换句话说 - 当 input
函数 returns.
时 data
仍然是 NULL
这就像 n
...对于 n
你正确地传递了一个指向 n
的指针并且你需要为 data
做完全相同的事情。
喜欢:
void input(int** buff, int *n) {
^^
// Notice the two *, i.e. pointer-to-pointer
....
*buff = calloc(....
....
并这样称呼它
input(&data, &n);
如果您只需要在您的函数中分配一个动态数组,您可以 return 一个指向它的指针:
int *input(int *buf, int *n);
...
data = input(data, &n);
...
int *input(int* buff, int *n) {
...
return buff;
}
我需要扫描 n
个数字,然后用以下扫描的 n
个数字填充一个数组。我必须在函数中同时使用 n
和数组输入以及使用动态内存。
void input(int* buff, int* n);
int main() {
int* data = NULL;
int n;
input(data, &n);
for (int i = 0; i < n; ++i) {
printf("%d ", data[i]);
}
return 0;
}
void input(int* buff, int *n) {
if (scanf("%d", n) == 1 && getchar() == '\n') {
if (*n <= 0) {
error = 1;
}
}
if (error == 0) {
buff = (int*)calloc(*n, sizeof(int));
if (buff == NULL) {
error = 1;
}
}
if (error == 0) {
int count = 0;
int p;
for (int i = 0; i < *n; i++) {
if (1 == scanf("%d", &p)) {
if (count < *n) {
*(buff + count) = p;
count++;
}
}
}
for (int i = 0; i < *n; i++) {
printf("%d, ", *(buff + i));
}
}
我没有在第一个 for
中插入程序的所有逻辑,因为它并不重要。
最后一个 for
打印了正确的元素,但是我有一个关于空指针的警告。
当我 return 到 main
并尝试打印时,我遇到了有关禁止读取访问的错误。
我哪里做错了?
input
中的 buff
时,main
中的 data
不会更改。换句话说 - 当 input
函数 returns.
data
仍然是 NULL
这就像 n
...对于 n
你正确地传递了一个指向 n
的指针并且你需要为 data
做完全相同的事情。
喜欢:
void input(int** buff, int *n) {
^^
// Notice the two *, i.e. pointer-to-pointer
....
*buff = calloc(....
....
并这样称呼它
input(&data, &n);
如果您只需要在您的函数中分配一个动态数组,您可以 return 一个指向它的指针:
int *input(int *buf, int *n);
...
data = input(data, &n);
...
int *input(int* buff, int *n) {
...
return buff;
}