指向c中的字符串概念

时间:2013-01-11 03:11:59

标签: c string pointers

有人可以告诉我以下声明是否正确:

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;
}

程序的目的是从另一个字符串复制字符串。

提前致谢。

3 个答案:

答案 0 :(得分:2)

要了解如何在C中确定变量类型,您应该学习“左右”规则&#39;这里解释: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数组的指针。

答案 1 :(得分:1)

  

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

它指向长度为10的char数组,可能会也可能不会被解释为字符串...

答案 2 :(得分:0)

char(* p)[10];

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

因此,流程为:[10] - &gt;这是一个包含10个元素的数组。                    (*p)[10] - &gt;这是一个指向10个任何类型元素的数组的指针。                    char (*p)[10] - &gt;这是一个指向包含10个char元素的数组的指针。

在这里我们可以找到如果我们没有括号,我们将首先遇到p[10]并且最终结果会有所不同:p首先是数组而不是指针。

您可以阅读Dan Sales撰写的一篇文章:const T vs. T const。它将帮助你理解这类问题,虽然它侧重于c ++。

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