-6

谁能告诉我以下声明是否正确:

char (*p)[10];

p是一个指向 10 个字符的字符串的指针。

我做了一个程序如下:

/*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 个字符的字符串的指针。

它是一个指向char长度为 10 的数组的指针,它可能会或可能不会被解释为字符串......

于 2013-01-11T03:13:23.403 回答
0

字符 (*p)[10];

解释这段代码的一个好方法是从右到左阅读,实际上,这是在编译中理解这段代码的真正方法。

所以过程是:[10]-> 这是一个有 10 个元素的数组。 (*p)[10]-> 这是一个指向包含 10 个任何类型元素的数组的指针。 char (*p)[10]-> 这是一个指向包含 10 个字符元素的数组的指针。

在这里我们可以发现,如果我们没有括号,我们将p[10]首先相遇,最终的结果会变得有点不同:p首先是一个数组而不是一个指针。

你可以阅读 Dan Sales 写的一篇文章:const T vs. T const。尽管它侧重于 c++,但它将对您理解这类问题有很大帮助。

对于你的程序,我只能说请做一个实验并发布你的结果,首先谢谢你^0^~~如果你让我猜,我想我会说它不起作用,因为指针类型错误。

于 2013-01-11T03:25:22.947 回答