char *p[3]={"a","bb","ccc"}; char *t; 书上说*(p+2)为指针类型,*t为字符类型,两者不可相互赋值

*t为字符类型,我可以理解,因为定义时为char,我不理解为什么*(p+2)为指针类型,它定义的时候前面也是char呀。

char *p[3]={"a","bb","ccc"};

应该理解为char* 指针类型 p[3]
也就是指向 字符串的大小为3的指针数组。
p存的是指向字符串的指针
那么*(p+2) 则指向的是 "ccc" 这个字符串数组。
直观点我们可以这样看
"a" 内存地址是 A
"bb" 内存地址是B
"ccc" 内存地址是C
那么p 数组 存的实际是 p[3] = {A,B,C};
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-21
char *p[3] 定义了一个指针数组。也就是说一个数组里面存放了三个指针。分别为p[0] p[1] p[2]。
*(p+2)相当于p[2]指向的是"ccc"这个字符串。
第2个回答  2012-08-22
*(p+2)="ccc" 显然"ccc"不是字符类型
至于*(p+2)定义的时候前面也有char这一问题,是因为字符串就是由字符指针实现的
第3个回答  2012-08-21
你想问什么~追问

我不理解为什么*(p+2)为指针类型,它定义的时候前面也是char呀。

追答

t也是指针类型 跟你说的这个一样 不是字符类型
如果你理解什么是指针 就不难理解了

若有说明:char *pc[ ]={"aaa", "bbb", "ccc", "ddd"};,则以下叙述正确...
选B。pc[0]表示指向字符串“aaa "的指针,而*pc[0]是取该指针所指的内存地址内的数值,就是a。

.设char*p="abcd";,执行语句printf("%C",*(p+2));后的输出结果是...
设char*p="abcd";,执行语句printf("%C",*(p+2));后的输出结果是__%C__执行语句printf("%c",*(p+2));后的输出结果是__c__ (*p指针后移2个字符是'c')要记得C语言是大小写敏感的。

设有如下变量定义char aa[ ][3]={‘a’,’b’,’c’,’d’,’e...
char (*p)[3]我们可以可以看到p是指向一个有三个元素的字符数组的指针。那么当p++的时候,相当于跳过指向的数组。再来看一下,char aa[ ][3]={‘a’,’b’,’c’,’d’,’e’,’f’};我们可以发现aa是二维数组,而p指向的是一维数组。所以我们去分解aa让他变成两个一维数组 {‘a’,’...

...<stdio.h> main() { char **p,*t[]={"computer","phone","mp4"}...
p是指针的指针 t[]是字符串指针类型的数组

设有定义:char p[]={'1','2','3'},*q=p;以下不能计算出一个char型数据...
答案是A。A计算出来的是P这个数组的全部长度,也就是包含了3个char的长度,原因很简单数组名就是数组的首地址,也就是说,P是指向整个数组的指针,对它计算当然得到的是整个数组的长度,后面的几个答案,都取出了地址上的值,比如*q是第一个值,p[0]也是,sizeof(char)这个更不用说了,直接就是...

char *a[2]={"one","two"},**p=a;printf("%s",*(p++)+1);printf("%c...
char *a[2]={"one","two"}, \/\/a为指针数组,a[0]为"one"的首地址,a[1]为"two"的首地址。p=a; \/\/p为二级指针,初始化为(指向)数组a的首元素即a[0]printf("%s",*(p++)+1); \/\/(p++)先返回(取得)p值使用,即a[0]中的值!\/\/ 解引用后*(p++)得到"one"的...

若定义char *p[3]={"C++", "Java", "Pascal"}; 设数组p的起始地址为...
p等价于p[0]所以**p等价于p[0][0]即'C'p+1即为'D'(p+1)等价于p[1](p+1)为'J'(p+1)+1即为'K'p[1]等价于p[1][0]即'J'(p[1]+1)等价于p[1][1]即'a'(p[1]+1)+1即'b'

若定义 char s[2][3]={"ab", "cd"}, *p=(char *)s; 那么下列表达式语法...
1] = 'd',这个应该没问题吧?第二个字符串的第二个字符。++p+2 这个比较有趣,p是一个char*指针,指向字符数组首地址,&s[0][0]。首先++的优先级更高执行++p得到的是&s[0][1],然后*运算符解引用,得到s[0][1]s[0][1]的字符是'b',然后'b'+2,得到的就是'd'的ASCII码。

char* p[2][3] = { "Hello","world","student","computer","end...
定义p是一个2行3列的二维数组,数组元素是指向char型的指针

...main() {char a[]={"ABCDE"}; char *p=a; *(p+2)+=2; printf("%s...
因为p+2指向a[2],然后+=2,所以a[2]的值变为E。p+1指向a[1],输出是从a[1]开始输出字符串,所以答案是 BEDE

相似回答