具有 malloc 语法错误的函数?
functions with malloc syntax error?
我刚开始使用指针,我不知道为什么这不起作用。如果我在 scan
函数中打印它可以工作,但它必须在一个单独的函数中。
#include <stdio.h>
#include <stdlib.h>
int scan(int n, int *buffer)
{
int i;
printf("nr of elements:\n");
scanf("%d", &n);
//int *buffer, i=0;
// *buffer=(int*)malloc((*n) * sizeof(int));
buffer = malloc((n + 1) * sizeof(*buffer));
for(i=0; i<n; i++){
buffer[i]=i+1;
printf ("%d ", buffer[i]);}
printf ("\n-------------\n");
}
void print(int *n,int *buffer){
int i;
for(i=0; i<n; i++){
printf ("%d ", buffer[i]);}
}
int main()
{
int n,i, *buffer;
scan(&n, &buffer);
print(n, *buffer);
printf("i quit\n");
for(i=0; i<n; i++){
printf ("%d ", buffer[i]);
}
return 0;
}
改变函数参数的方式有两种(在函数外改变数据):
1) 使用引用(在我的示例中 - 扫描函数的第一个参数)
2) 使用指针(在我的示例中 - scan 的第二个参数...此参数的类型为 int*)
试试这个(我的评论显示了变化):
#include <stdio.h>
#include <stdlib.h>
void scan(int &n, int ** buffer) // pointer to pointer for bufer, void instead of int for function, and &int for n
{
int i;
printf("nr of elements:\n");
scanf("%d", &n);
*buffer = (int*) malloc( n * sizeof(**buffer)); // (int*) should be, and *buffer
for(i=0; i<n; i++){
(*buffer)[i]=i+1; // *buffer
printf ("%d ", (*buffer)[i]); // *buffer
}
printf ("\n-------------\n");
}
void print(int n, int *buffer) // type of n changed from int* to int
{
int i;
for(i=0; i<n; i++){
printf ("%d ", buffer[i]);
}
}
int main()
{
int n,i, *buffer = NULL;
scan(n, &buffer);
print(n, buffer); // buffer is pointer, no need to use *
printf("i quit\n");
for(i=0; i<n; i++){
printf ("%d ", buffer[i]);
}
return 0;
}
注意:如果您想更改数据,可以使用
void changeArgument(int * data)
{
(*data)++;
}
但要更改数据地址,您应该使用
void changeArgument(int ** pointer)
{
(*pointer) = (int*)malloc(sizeof(int));
}
它可以帮助使用(稍微)更具描述性的变量名称,使扫描中的 'n' 与打印中的 'n' 不同:
#include <stdio.h>
#include <stdlib.h>
void scan(int *np, int **bufferp)
{
int i;
printf("nr of elements:\n");
scanf("%d", np);
*bufferp = (int*)malloc(*np * sizeof(**bufferp));
for(i=0; i < *np; i++){
(*bufferp)[i] = i + 1;
printf ("%d ", (*bufferp)[i]);
}
printf ("\n-------------\n");
}
void print(int n, int *buffer){
int i;
for(i=0; i<n; i++){
printf ("%d ", buffer[i]);
}
printf("\n");
}
int main()
{
int n, i, *buffer;
/* pass references to n and buffer for scan to modify */
scan(&n, &buffer);
print(n, buffer);
return 0;
}
要么用 void return 类型声明 scan() 并显示数据本身。
或者,如果您希望函数为 return int,则不要在函数中打印 return 值并将其显示在 main() 中。那么它应该可以正常工作。
我刚开始使用指针,我不知道为什么这不起作用。如果我在 scan
函数中打印它可以工作,但它必须在一个单独的函数中。
#include <stdio.h>
#include <stdlib.h>
int scan(int n, int *buffer)
{
int i;
printf("nr of elements:\n");
scanf("%d", &n);
//int *buffer, i=0;
// *buffer=(int*)malloc((*n) * sizeof(int));
buffer = malloc((n + 1) * sizeof(*buffer));
for(i=0; i<n; i++){
buffer[i]=i+1;
printf ("%d ", buffer[i]);}
printf ("\n-------------\n");
}
void print(int *n,int *buffer){
int i;
for(i=0; i<n; i++){
printf ("%d ", buffer[i]);}
}
int main()
{
int n,i, *buffer;
scan(&n, &buffer);
print(n, *buffer);
printf("i quit\n");
for(i=0; i<n; i++){
printf ("%d ", buffer[i]);
}
return 0;
}
改变函数参数的方式有两种(在函数外改变数据):
1) 使用引用(在我的示例中 - 扫描函数的第一个参数)
2) 使用指针(在我的示例中 - scan 的第二个参数...此参数的类型为 int*)
试试这个(我的评论显示了变化):
#include <stdio.h>
#include <stdlib.h>
void scan(int &n, int ** buffer) // pointer to pointer for bufer, void instead of int for function, and &int for n
{
int i;
printf("nr of elements:\n");
scanf("%d", &n);
*buffer = (int*) malloc( n * sizeof(**buffer)); // (int*) should be, and *buffer
for(i=0; i<n; i++){
(*buffer)[i]=i+1; // *buffer
printf ("%d ", (*buffer)[i]); // *buffer
}
printf ("\n-------------\n");
}
void print(int n, int *buffer) // type of n changed from int* to int
{
int i;
for(i=0; i<n; i++){
printf ("%d ", buffer[i]);
}
}
int main()
{
int n,i, *buffer = NULL;
scan(n, &buffer);
print(n, buffer); // buffer is pointer, no need to use *
printf("i quit\n");
for(i=0; i<n; i++){
printf ("%d ", buffer[i]);
}
return 0;
}
注意:如果您想更改数据,可以使用
void changeArgument(int * data)
{
(*data)++;
}
但要更改数据地址,您应该使用
void changeArgument(int ** pointer)
{
(*pointer) = (int*)malloc(sizeof(int));
}
它可以帮助使用(稍微)更具描述性的变量名称,使扫描中的 'n' 与打印中的 'n' 不同:
#include <stdio.h>
#include <stdlib.h>
void scan(int *np, int **bufferp)
{
int i;
printf("nr of elements:\n");
scanf("%d", np);
*bufferp = (int*)malloc(*np * sizeof(**bufferp));
for(i=0; i < *np; i++){
(*bufferp)[i] = i + 1;
printf ("%d ", (*bufferp)[i]);
}
printf ("\n-------------\n");
}
void print(int n, int *buffer){
int i;
for(i=0; i<n; i++){
printf ("%d ", buffer[i]);
}
printf("\n");
}
int main()
{
int n, i, *buffer;
/* pass references to n and buffer for scan to modify */
scan(&n, &buffer);
print(n, buffer);
return 0;
}
要么用 void return 类型声明 scan() 并显示数据本身。 或者,如果您希望函数为 return int,则不要在函数中打印 return 值并将其显示在 main() 中。那么它应该可以正常工作。