2
    #include<stdio.h>
    void swap(char *, char *);

    int main()
    {
        char *pstr[2] = {"Hello", "IndiaBIX"};
        swap(&pstr[0],&pstr[1]);
        printf("%s\t%s", pstr[0], pstr[1]);
        return 0;
    }
    void swap(char **t1, char **t2)
    {
         char *t;
         t=*t1;
         *t1=*t2;
         *t2=*t;
    }

次のような関数を呼び出して文字列のポインタを交換できない理由がわかりません。

swap(pstr[0],pstr[1]);

なぜそれを使わないのかというジレンマに陥っていました。誰か助けてください。

ありがとう..

4

4 に答える 4

3

実際には、主に2つのエラーがあります。

  • 命令*t2 = *t*t2は、は文字列*tですが、は単一の文字です。
  • の宣言はswapその定義とは異なります。

また、は読み取り専用文字列へのポインタになる可能性があるため、へのポインタとして宣言することをpstr[0]お勧めします。pstr[1]const char

その場合、次のコードは正常に機能します(文字列自体ではなく、両方のポインターの値のみを交換します)。

#include <stdio.h>

static void 
swap(const char ** const p, const char ** const q)
{
    const char * const pTmp = *p;
    *p = *q;
    *q = pTmp;
}

int main(void)
{
    const char *p[] = { "Hello", "IndiaBIX" };
    printf("%s - %s\n", p[0], p[1]);
    swap(p, p + 1);
    printf("%s - %s\n", p[0], p[1]);
    return 0;
}
于 2012-08-31T11:24:47.413 に答える
2

このswap(pstr [0]、pstr 1);のような関数を呼び出して、文字列のポインタをスワップできない理由がわかりません。

スワップ関数は、charへのポインターではなく、ポインターへのポインターを想定しているためです。内容ではなく実際のポインタを変更するので、そのようなものです。このCFAQは関連性があります。

于 2012-08-31T11:24:09.390 に答える
0

まず、関数 swap の宣言と定義に不一致があります。それに見る。

于 2012-08-31T11:25:54.757 に答える
0

デバッガーに慣れる時が来たようです。Linux を使用している場合は、 をお勧めしgdbます。

スイッチを使用して debug-info でプログラムをコンパイルします-g

プログラムを実行します。

gdb -q ./a.out

にブレークポイントを設定するにはmain:

b main

コマンドを使用してプログラムを実行しrます。次に、コマンドを使用してコードをステップ実行しn、コマンドを使用して変数を確認しますp。幸運を。

于 2012-08-31T11:27:17.983 に答える