char *S,*P; *S++=*P; 请问,怎么理解? 5
4个回答
展开全部
char *S,*P; // 声明 S 是 char 指针,P 是 char 指针
*S++=*P;
// 理解成两步,第一步P指向的一个char值赋给S,S指针指向单元地址增1
*S = *P; S=S+1;
这步运算前,应当要对*S,*P 初始化,否则不能运算。我们可以写成:
char *S="AB",*P="ab";
*S = *P;
printf("%s\n",S);
S=S+1;
printf("%s\n",S);
-----------
你可以对比
char *S="AB",*P="ab";
*S++=*P;
printf("%s\n",S);
的结果。
*S++=*P;
// 理解成两步,第一步P指向的一个char值赋给S,S指针指向单元地址增1
*S = *P; S=S+1;
这步运算前,应当要对*S,*P 初始化,否则不能运算。我们可以写成:
char *S="AB",*P="ab";
*S = *P;
printf("%s\n",S);
S=S+1;
printf("%s\n",S);
-----------
你可以对比
char *S="AB",*P="ab";
*S++=*P;
printf("%s\n",S);
的结果。
追问
请问,为什么在运行时报错!
追答
*S,*P 没有初始化,就要报错。
-------------
char *S="AB",*P="ab";
*S = *P;
printf("%s\n",S);
S=S+1;
printf("%s\n",S);
得:
aB
B
-----------------
char *S="AB",*P="ab";
*S++=*P;
printf("%s\n",S);
得
B
------------------
VC++ 6.0 编译器。
2011-04-01
展开全部
比如说,定义了ch[2][5],其实就相当于定义了ch[10]的空间,那么对于定义ch[10],其实也可以通过访问ch[1][4]来访问ch[9]这个数组成员。
两者在内存中是等价的,完全可以通过以上两种不同的方式来访问。
ch[0][0] ch[0]
ch[0][1] ch[1]
ch[0][2] ch[2]
ch[0][3] ch[3]
ch[0][4] ch[4]
ch[1][0] ch[5]
... ...
ch[1][4] ch[9]
而关于指针P为什么可以访问,对于数组和指针,两者在内存分配的地点上有些许差别,但都起指向的作用。因此初学者或者甚至是专业程序员都不用考虑太多两者的类型问题。
另外,团IDC网上有许多产品团购,便宜有口碑
两者在内存中是等价的,完全可以通过以上两种不同的方式来访问。
ch[0][0] ch[0]
ch[0][1] ch[1]
ch[0][2] ch[2]
ch[0][3] ch[3]
ch[0][4] ch[4]
ch[1][0] ch[5]
... ...
ch[1][4] ch[9]
而关于指针P为什么可以访问,对于数组和指针,两者在内存分配的地点上有些许差别,但都起指向的作用。因此初学者或者甚至是专业程序员都不用考虑太多两者的类型问题。
另外,团IDC网上有许多产品团购,便宜有口碑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是定义字符型指针,后面那个是指针S所指的地址的下一个地址和指针P指向同一个地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义了两个指向字符的指针S,P。S++所指的内容为P所指的内容。S++可以理解为:S指向一个字符,S中存储那个字符的地址,S++即这个地址的下一个。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询