有人可以告诉我以下声明是否正确:
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;
}
程序的目的是从另一个字符串复制字符串。
提前致谢。
答案 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 ^ ~~如果你让我猜,我想我会说它不会工作因为指针的类型是错误的