鱼C论坛

 找回密码
 立即注册
查看: 1817|回复: 14

[已解决]为什么 char *(*pp)[4] =& p;可以找对地址,char (*cc)[4] = p;不行?

[复制链接]
发表于 2017-10-18 20:54:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{ char *p[4]={"hello","asdasd","howare","cjc"

              };
    char *(*pp)[4] =& p;
     char (*cc)[4] = p;
     
    printf("%s\t,%s\n",(*pp)[1],p[1]);
   
     printf("%p\t,%p\n",(*pp)+1,p+1);  
      printf("%p\t,%p\n",cc+1,p+1);  
     printf("%p\t,%p\n",cc,*pp);  

}
  为什么 char *(*pp)[4] =& p;可以找对地址,char (*cc)[4] = p;不行?
最佳答案
2017-10-18 22:00:35

要是觉得看得懂并且懂了,麻烦点下“最佳答案”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-10-18 20:56:28 | 显示全部楼层
char (*cc)[4] = p;不行我知道为什么, char *(*pp)[4] =& p;为什么给了&P后 ,每次都能找对地址啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 21:35:03 | 显示全部楼层

回帖奖励 +4 鱼币

指向指针数组的指针的指针数组,解指针后应该和原来的一模一样吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 21:40:51 | 显示全部楼层
因为pp指向的是有4个元素的数组的指针,那么指针必定会和数组的每一个元素对应起来。看代码来讲就是pp得到的是&p,是整个指针数组的范围,而cc只是得到了数组的第一元素地址。
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         char *p[4]={"hello","asdasd","howare","cjc"};
  5.         char *(*pp)[4] =&p;
  6.         char (*cc)[4] = p;
  7.        
  8.         printf("%s\t,%s\n",(*pp)[0],cc[0]);

  9.         printf("%p\t%p\t%p\n", p[0], cc+0, (*pp)[0]);  
  10. }
复制代码

p是指针数组也是数组名,查看某一字符串地址就要先得到指针;pp是指向指针数组的数组指针查看地址就要先解引用得到数组地址,再找到对应的下标的数组指针;而cc就是指针,直接打印地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 21:42:11 | 显示全部楼层
思考了半天怎么说,居然被抢先了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-18 21:59:05 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-18 21:42
思考了半天怎么说,居然被抢先了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 22:00:35 | 显示全部楼层    本楼为最佳答案   

要是觉得看得懂并且懂了,麻烦点下“最佳答案”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 22:01:24 | 显示全部楼层
本帖最后由 lh625243422 于 2017-10-18 22:06 编辑

[Error] cannot convert 'char* (*)[4]' to 'char (*)[4]' in initialization
意思是2种指针类型不同不能赋值,注意给指针赋值并不等于把首地址给他就行,
而是数据类型和数据首地址。
char *(*pp)[4] =&p;这是个指向指针数组,(*p[],所以必须是&加数组名,具体查看小甲鱼带《你学习带你飞》23课 )的指针的指针
指向指针数组指针的指针就是指向数组p,然后p是指向字符串(字符串常量可看做指针)指针的数组,所以再次指向字符串指针。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 22:09:26 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-18 21:40
因为pp指向的是有4个元素的数组的指针,那么指针必定会和数组的每一个元素对应起来。看代码来讲就是pp得到 ...

我的会报错你的不会?[Error] cannot convert 'char**' to 'char (*)[4]' in initialization
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 22:14:04 | 显示全部楼层
lh625243422 发表于 2017-10-18 22:09
我的会报错你的不会?[Error] cannot convert 'char**' to 'char (*)[4]' in initialization

你说我的改的程序还他自己写的?
我这里都不会报错,都是可以运行的。我用的是VC++6.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 22:16:09 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-18 22:14
你说我的改的程序还他自己写的?
我这里都不会报错,都是可以运行的。我用的是VC++6.0

我的是dev c++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-18 23:13:28 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-18 22:00
要是觉得看得懂并且懂了,麻烦点下“最佳答案”

指针数组不是储存的是地址吗?地址的长度应该都一样吗?为什么储存地址的地址长度都不一样啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 23:22:22 | 显示全部楼层
cczzz 发表于 2017-10-18 23:13
指针数组不是储存的是地址吗?地址的长度应该都一样吗?为什么储存地址的地址长度都不一样啊?

是的,是地址。 长度都是一样的八位,只是地址不一样。就要,就是因为存储的地址(就是指针指向的地址)不一样,才会使得打印出来的东西不一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-18 23:32:03 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-18 23:22
是的,是地址。 长度都是一样的八位,只是地址不一样。就要,就是因为存储的地址(就是指针指向的地址) ...
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         char *p[4]={"hello","asdasd","howare","cjc"};
  5.       
  6.       
  7.         
  8.         printf("%s\t",p[1]);
  9.         printf("p的地址是%p\t",p);
  10.         
  11.         printf("p的地址是%p\t",p+1);
  12.         printf("\np的地址是%p\t",p+2);
  13. }
复制代码
你跑下这个程序,打出来的是储存地址的地址,他们的字节不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 23:34:52 | 显示全部楼层
cczzz 发表于 2017-10-18 23:32
你跑下这个程序,打出来的是储存地址的地址,他们的字节不一样

我刚要和你说,等会,我在你的另一个帖子写,等会就发出来,稍等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 23:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表