为什么 char *(*pp)[4] =& p;可以找对地址,char (*cc)[4] = p;不行?
#include<stdio.h>int main()
{ char *p={"hello","asdasd","howare","cjc"
};
char *(*pp) =& p;
char (*cc) = p;
printf("%s\t,%s\n",(*pp),p);
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) =& p;可以找对地址,char (*cc) = p;不行? char (*cc) = p;不行我知道为什么, char *(*pp) =& p;为什么给了&P后 ,每次都能找对地址啊? 指向指针数组的指针的指针数组,解指针后应该和原来的一模一样吧 因为pp指向的是有4个元素的数组的指针,那么指针必定会和数组的每一个元素对应起来。看代码来讲就是pp得到的是&p,是整个指针数组的范围,而cc只是得到了数组的第一元素地址。
#include<stdio.h>
int main()
{
char *p={"hello","asdasd","howare","cjc"};
char *(*pp) =&p;
char (*cc) = p;
printf("%s\t,%s\n",(*pp),cc);
printf("%p\t%p\t%p\n", p, cc+0, (*pp));
}
p是指针数组也是数组名,查看某一字符串地址就要先得到指针;pp是指向指针数组的数组指针查看地址就要先解引用得到数组地址,再找到对应的下标的数组指针;而cc就是指针,直接打印地址 思考了半天怎么说,居然被抢先了{:10_250:} 丶忘却的年少o 发表于 2017-10-18 21:42
思考了半天怎么说,居然被抢先了
{:10_287:} cczzz 发表于 2017-10-18 21:59
要是觉得看得懂并且懂了,麻烦点下“最佳答案”{:10_338:} 本帖最后由 lh625243422 于 2017-10-18 22:06 编辑
cannot convert 'char* (*)' to 'char (*)' in initialization
意思是2种指针类型不同不能赋值,注意给指针赋值并不等于把首地址给他就行,
而是数据类型和数据首地址。
char *(*pp) =&p;这是个指向指针数组,(*p[],所以必须是&加数组名,具体查看小甲鱼带《你学习带你飞》23课 )的指针的指针
指向指针数组指针的指针就是指向数组p,然后p是指向字符串(字符串常量可看做指针)指针的数组,所以再次指向字符串指针。 丶忘却的年少o 发表于 2017-10-18 21:40
因为pp指向的是有4个元素的数组的指针,那么指针必定会和数组的每一个元素对应起来。看代码来讲就是pp得到 ...
我的会报错你的不会? cannot convert 'char**' to 'char (*)' in initialization lh625243422 发表于 2017-10-18 22:09
我的会报错你的不会? cannot convert 'char**' to 'char (*)' in initialization
你说我的改的程序还他自己写的?
我这里都不会报错,都是可以运行的。我用的是VC++6.0 丶忘却的年少o 发表于 2017-10-18 22:14
你说我的改的程序还他自己写的?
我这里都不会报错,都是可以运行的。我用的是VC++6.0
我的是dev c++ 丶忘却的年少o 发表于 2017-10-18 22:00
要是觉得看得懂并且懂了,麻烦点下“最佳答案”
指针数组不是储存的是地址吗?地址的长度应该都一样吗?为什么储存地址的地址长度都不一样啊? cczzz 发表于 2017-10-18 23:13
指针数组不是储存的是地址吗?地址的长度应该都一样吗?为什么储存地址的地址长度都不一样啊?
是的,是地址。 长度都是一样的八位,只是地址不一样。就要,就是因为存储的地址(就是指针指向的地址)不一样,才会使得打印出来的东西不一样。 丶忘却的年少o 发表于 2017-10-18 23:22
是的,是地址。 长度都是一样的八位,只是地址不一样。就要,就是因为存储的地址(就是指针指向的地址) ...
#include<stdio.h>
int main()
{
char *p={"hello","asdasd","howare","cjc"};
printf("%s\t",p);
printf("p的地址是%p\t",p);
printf("p的地址是%p\t",p+1);
printf("\np的地址是%p\t",p+2);
} 你跑下这个程序,打出来的是储存地址的地址,他们的字节不一样 cczzz 发表于 2017-10-18 23:32
你跑下这个程序,打出来的是储存地址的地址,他们的字节不一样
我刚要和你说,等会,我在你的另一个帖子写,等会就发出来,稍等
页:
[1]