-
不负相思意
你想改变char*因此,您需要接受foo()带着再往前看a;achar**(指向char指针)。因此foo()将改写为:void foo(char **foo /* changed */, int baa){
if(baa)
{
*foo = "ab"; /* changed */
}
else
{
*foo = "cb"; /* changed */
}}现在打电话的时候foo(),你会通过一个指向x使用地址-of操作符(&):foo(&x, 1);不正确的片段打印的原因baa是因为您只是简单地将一个新值分配给本土化变量char *foo,这与x..因此,其价值x从未修改过。
-
梵蒂冈之花
有许多问题:void foo(char *foo, int baa){
if (baa)
foo = "ab";
else
foo = "cb";}此代码更改本地指针,但对其不做任何操作。若要复制字符串,需要使用strcpy()若要保持接口相同,请执行以下操作:void foo(char *foo, int baa){
if (baa)
strcpy(foo, "ab");
else
strcpy(foo, "cb");}但是,在这样做之前,您需要确保foo在可修改内存的功能点上。需要修改调用代码,以确保:char x[] = "baa";foo(x, 1);printf("%s\n", x);或者,你可以x作为指针并修改函数接口:void foo(char **foo, int baa){
if (baa)
*foo = "ab";
else
*foo = "cb";}呼叫顺序:char *x = "baa";foo(&x, 1);printf("%s\n", x);这两种机制都起作用,但其方式不同。每个问题都有不同的问题。没有一个‘这比那个更好’的决定;这更好地取决于所显示的代码片段范围之外的环境。
-
慕标5832272
你的问题是以一种通用的方式命名的。你已经为你的具体问题找到了答案。我将为int和double类型。#include <stdio.h>void incrementInt(int* in, int inc){
*in += inc;}void incrementDouble(double* in, double inc){
*in += inc;}int main(){
int i = 10;
double d = 10.2;
printf("i: %d, d: %lf\n", i, d);
incrementInt(&i, 20);
incrementDouble(&d, 9.7);
printf("i: %d, d: %lf\n", i, d);}产出:i: 10, d: 10.200000
i: 30, d: 19.900000