-
char *name;由于优先级高于 *,所以 first name 是一个数组,它的元素是 char *,即 name 是指向 char 类型的指针数组,name[0] 是指向 char 类型的指针"one"String,同样 name[1] 也是 char 类型的指针,他指向它"two",而 char **p 表示 p 是指向指针的指针,因此。
显然 p=name[1] 不是 true,两个数据类型都不匹配 p 是指向指针的指针,而 name[1] 是指向 char 类型的指针。
printf("%s",name[1]) 为什么不用 printf("%s",name+1),对于这个问题,也是数据类型不匹配,printf("%s",name[1]) 可以更改为 printf("%s",*(name+1));name[1] 其实可以写成一个指针引用,即 *(name+1),这两个方法是等价的,name 其实只是数组的名称,也就是数组的第一个地址,它的元素是指向字符串的指针。
希望对你有所帮助!
-
(name + 1) 与 name[1] 相同,用于获取内容。
但名字就是地址。
-
name+1 是地址。
name[1] 是一个字符串值。
-
name+1 的类型为 char **,name[1] 的类型为 char *,类型不同。
-
name+1 是指向指针的指针。
name[1] 是一个指针。
不是一个类型。
-
第一个问题显然是答案。
第二个问题显然是ACD数组的越界错误 正确答案是b,第三个问题a是x[3]是3,毫无疑问,b p1是x[3]的地址 ++是x[3]的地址 ++是x[2]的地址也是3 c p1是x[2]的地址, 下面的++是表达式的最后一次执行,不用括号,d也是x[3]的地址,++显然是正确的。
所以只有 c 是错的,答案是 c
这个问题库的正确答案是无法给出的,显然不值得你练习,建议换个地方做题第二个问题太明显了,数组10的大小最多下标9,而这个问题的答案是错误的,可见提问者的水平。第一个问题无论如何都离不开c和d,答案其实是b,对智商的侮辱太大了。不要打扰它,如果你想学习指针,请阅读 C-pointers and traps 一书。