所以我试图使用一种方法将x [2]的值从0改为8,我的方法不起作用。我怎样才能做到这一点?我试着四处寻找但无济于事。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void changevar(int* x){
int* y;
y = &x[2];
y = 8;
}
int main(int argc, char** argv){
int* c;
c = (int*) malloc(sizeof(int));
printf("here %d\n", c[2]);
changevar(&c);
printf("here %d\n", c[2]);
free(c);
}
编辑:我是指针
的新手答案 0 :(得分:1)
首先需要分配足够的空间:
c = malloc(3 * sizeof(int));
请注意I didn't cast the return value。
值未初始化为零。它们可以是任何东西(“未定义”)。你可以用以下方法清除它:
memset(c, 0, 3 * sizeof(int));
接下来,您需要将此值原样传递给您的函数。 (毕竟,它已经是一个指针。)
changevar(c);
在您的函数中,您需要取消引用该地址才能访问它:
*y = 8;
这些是我看到的错误。
答案 1 :(得分:0)
所以有两个问题对我有用。
int
来电中为一个malloc
分配内存,但尝试访问内存,建议您为3 ints
分配最小空格。int*
,但是changevar(&c)
您传递的是int**
,因为您提供了指针的地址。要解决这些问题,只需进行一些更改......
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void changevar(int* x){
x[2] = 8; // <-- can be simplified to this one line
}
int main(int argc, char** argv){
int* c;
int amt = 3; // <-- number of ints you want to be able to have space for
c = malloc(sizeof(int) * amt); // <-- multiply the size and the amount you want
printf("here %d\n", c[2]);
changevar(c); // <-- remove the '&' from the argument to just pass the pointer 'c'
printf("here %d\n", c[2]);
free(c);
}
输出变为:
here 0
here 8
答案 2 :(得分:0)
正在打印垃圾值,因为数组c
的大小为1。
c = (int*) malloc(sizeof(int));
将创建一个大小为1的数组c
。
c[2]
是垃圾值。 (在大多数系统中,打印0而不是垃圾编号。)
您的&c[2]
和y
未提及相同的地址。
你想做的可能就是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void changevar(int** x){
*(*x+2)=8;
}
int main(int argc, char** argv){
int* c;
c = (int*) malloc(3*sizeof(int));
for(int i=0;i<3;i++){
c[i]=0;
}
printf("here %d\n", c[2]);
changevar(&c);
printf("\nhere %d\n", c[2]);
free(c);
}
打印:
here 0
here 8