考えると逆参照と呼ばれています。あなたが整数を設定することができるように機能する整数のアドレスを渡したいときには、使用:あなたがポインタの値を設定することを除いて
void setTo7 (int *x) {
*x = 7;
}
: : :
int a = 4;
setTo7 (&a);
// a is now 7.
それはあなたが持っているものとは全く違うませんそのポインタにポインタを渡す必要があります。シンプルな、いいえ?
#include <stdio.h>
#include <string.h>
static void setTo7 (int *x) { *x = 7; }
void appendToStr (char **str, char *app) {
// Allocate enough space for bigger string and NUL.
char *newstr = malloc (strlen(*str) + strlen (app) + 1);
// Only copy/append if malloc worked.
if (newstr != 0) {
strcpy (newstr, *str);
strcat (newstr, app);
}
// Free old string.
free (*str);
// Set string to new string with the magic of double pointers.
*str = newstr;
}
int main (void) {
int i = 2;
char *s = malloc(6); strcpy (s, "Hello");
setTo7 (&i); appendToStr (&s, ", world");
printf ("%d [%s]\n",i,s);
return 0;
}
出力は次のとおりです:
これを試してみてください
7 [Hello, world]
この安全に十分なスペースを割り当てる、別の文字列値を追加します。インテリジェントなメモリ割り当て関数ではダブルポインターがよく使われますが、C++ではネイティブの文字列型が使用されていますが、他のポインターでは便利です。
C++をやっているのなら、なぜ古典的な 'typedef struct {/*...*/} 'が表示されますか?参照の代わりにポインタを渡すのはなぜですか?あなたが割り振っているのであれば、なぜ裸のポインタですか? (ああ、その関数は約束した 'int'を返さない) – sbi