-6

次の宣言が正しいかどうか教えてください。

char (*p)[10];

p10 文字の文字列へのポインタです。

以下のようなプログラムを作りました。

/*PROGRAM*/

#include<stdio.h>
#include<string.h>

void xstrcpy(char (**)[], const char (**)[]);
void main()
{
    const char (*xsource)[10]="SUPERB";

    char (*xtarget)[10];

    printf("\n\n*************PART1*************\n\n");   
    printf("%s\n",xsource);

    printf("\n\n*************PART2*************\n\n");

    xtarget=xsource;

    printf("%s\n",xtarget);

    printf("\n\n*************PART3*************\n\n");


    xstrcpy(xtarget,xsource);
    puts(xtarget);

}

void xstrcpy(char (**p)[],const char (**q)[])
{

        p=q;
}

プログラムの目的は、文字列を別の文字列からコピーすることです。

前もって感謝します。

4

3 に答える 3

2

C で変数の型を決定する方法を学ぶには、ここで説明されている「右左規則」を学ぶ必要があります: http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html

ルールを使用し、 ieng9 の記事のスタイルに従って、例でタイプを決定する方法は次のとおりです。

1. Find identifier                      char (*p)[10];
                                               ^
   "p is a"

2. Move right (stop at right paren)     char (*p)[10];
                                                ^
3. Stop at right paren and move left    char (*p)[10];
                                              ^
   "p is a pointer to"

4. Stop at left paren and move right    char (*p)[10];
                                                 ^
   "p is a pointer to array (size 10) of"

5. Out of symbols so move left          char (*p)[10];
                                        ^
   "p is a pointer to array (size 10) of char"

つまり、p はサイズ 10 の char 配列へのポインターです。

于 2013-01-11T03:29:39.197 に答える
1

p は、10 文字のストリングへのポインターです。

これは、長さ 10 の配列へのポインターでcharあり、文字列として解釈される場合と解釈されない場合があります...

于 2013-01-11T03:13:23.403 に答える
0

char (*p)[10];

このコードを説明する良い方法は、右から左に読むことです。実際、これがコンパイル時にこのコードを理解する本当の方法です。

プロセスは次のとおりです: [10]-> これは 10 個の要素を持つ配列です。 (*p)[10]-> これは、10 個の任意の型の要素を持つ配列へのポインタです。 char (*p)[10]-> これは、10 個の char 要素を持つ配列へのポインタです。

ここで、角かっこがない場合に見つけることができます。p[10]最初に出会い、最終結果は少し異なります。p は、最初はポインターではなく配列です。

Dan Sales によって書かれた 1 つの記事を読むことができます: const T vs. T const。C++ に焦点を当てていますが、この種の問題を理解するのに大いに役立ちます。

あなたのプログラムについては、実験を行って結果を投稿してくださいとしか言​​えません。まずありがとうございます^0^ ~~推測させていただければ、ポインターのタイプが間違っているため、機能しないと思います。

于 2013-01-11T03:25:22.947 に答える