我有以下代码
void fun(int * d)
{
d+=1;
}
int main()
{
int * f=malloc(5);
f[0]=0;f[1]=1;f[2]=2;f[3]=3;f[4]=4;
fun(f);
printf("value : %d\n",*f);
return 0;
}
所以,我将一个整数指针传递给函数并在那里递增。我希望该增量在返回main时保持不变。 当我打印该值时,输出为“0”。但我希望输出为'1',因为我已经增加了函数中的值。
所以,简而言之,我的问题是,如何坚持对指针所做的更改?
答案 0 :(得分:4)
假设你想增加指针,不这个值,你有两个选择:
将函数重新转换为void fun(int ** d)
,在函数体中使用(*d)+=1;
,然后使用fun(&f);
将函数重新转换为int* fun(int* d)
,返回新值。
如果您想增加值,请在函数体中使用(*d)+=1;
。
您不需要*d
周围的括号:为了清楚起见,我已将它们放入。
答案 1 :(得分:1)
你忘了*在d + = 1;
当您传递该指针时,您可以使用该方法访问f [0]: 看看这里:
#include <stdio.h>
#include<stdlib.h>
void fun(int *d){
*d+=1;
}
int main(void){
int i;
int *f=malloc(5 * sizeof int);
f[0]=0;f[1]=1;f[2]=2;f[3]=3;f[4]=4;
for(i=0;i<5;i++){
printf("%d ",f[i]);
}
printf("\n");
fun(f);
for(i=0;i<5;i++){
printf("%d ",f[i]);
}
free(f);
return 0;
}
输出:
0 1 2 3 4 1 1 2 3 4
或者,如果您尝试为所有元素添加+1,则可以执行以下操作:
#include <stdio.h>
#include<stdlib.h>
int *fun(int *d, int len){
int i;
int *newArray = d;
int newValue = 1;
printf("\n");
for(i = 0; i < len; i++) {
newArray[i] += newValue;
}
return newArray;
}
int main(void){
int i;
int f[] = {0,1,2,3,4};
int *newArray;
f[0]=0;f[1]=1;f[2]=2;f[3]=3;f[4]=4;
for(i=0;i<5;i++){
printf("%d ",f[i]);
}
printf("\n");
newArray = fun(f,5);
for(i=0;i<5;i++){
printf("%d ",newArray[i]);
}
return 0;
}
输出:
0 1 2 3 4 1 2 3 4 5
顺便说一句,你忘了释放 f 。
答案 2 :(得分:0)
你必须传递指针的地址,所以:
void fun(int **val) {
*val++;
....
}
int main() {
...
fun(&f);
...
}