N******n 发帖数: 3003 | 1 书上的例子:
char *p[3]={'a','b','c'}
你如果看visual C++追踪,p[1] is a pointer, *p[1] value =a;
但是你打印这两个值,他们都得到a。
好像从来没有打印出地址的情况。 | t***t 发帖数: 6066 | 2 print is overloaded?
【在 N******n 的大作中提到】 : 书上的例子: : char *p[3]={'a','b','c'} : 你如果看visual C++追踪,p[1] is a pointer, *p[1] value =a; : 但是你打印这两个值,他们都得到a。 : 好像从来没有打印出地址的情况。
| N******n 发帖数: 3003 | 3 我奇怪的是: 打印
p[3]和*p[3]都是一样的结果, 实际上前面是地址。
我同意你下面的分析,你用了& | W*****x 发帖数: 684 | 4 你把代码贴上来看看。。。
1 #include
2
3 int main(void)
4 {
5 char p_ch[3] = {'a', 'b', 'c'};
6 char *p_str[3] = {"a", "b", "c"};
7
8 printf("p_ch[1] = %c\n", p_ch[1]);
9 printf("p_ch[1] @ %p\n", &p_ch[1]);
10 printf("p_ch[1] @ %p\n", p_ch+1);
11
12 printf("p_str[1] = %s\n", p_str[1]);
13 printf("p_str[1] @ %p\n", &p_str[1]);
14 printf("p_str[1] @ %p\n", p_str+1);
15
16 return 0;
17 }
p_ch[1] = b
p_ch[1] @ 0x7fff903d1881
p_ch[1] @ 0x7fff903d1881
p_str[1] = b
p_str[1] @ 0x7fff903d1868
p_str[1] @ 0x7fff903d1868 | N******n 发帖数: 3003 | 5
你的也一样:printf("p_str[1] = %sn", p_str[1]);
printf("p_str[1] @ %cn", *p_str[1]);
两个都是 b
我的是: std::cout<
也是一样
【在 W*****x 的大作中提到】 : 你把代码贴上来看看。。。 : 1 #include : 2 : 3 int main(void) : 4 { : 5 char p_ch[3] = {'a', 'b', 'c'}; : 6 char *p_str[3] = {"a", "b", "c"}; : 7 : 8 printf("p_ch[1] = %c\n", p_ch[1]); : 9 printf("p_ch[1] @ %p\n", &p_ch[1]);
| k**********g 发帖数: 989 | 6
Wrong code, not sure why it pass compilation and/or doesn't crash. Doesn't
compile on my machine.
If you want them to point to strings, use
int main()
{
const char* p[3] = { "a", "b", "c" };
std::cout << p[0] << std::endl;
std::cout << p[1] << std::endl;
std::cout << p[2] << std::endl;
return 0;
}
Notice double quote, because each is a string literal.
【在 N******n 的大作中提到】 : 书上的例子: : char *p[3]={'a','b','c'} : 你如果看visual C++追踪,p[1] is a pointer, *p[1] value =a; : 但是你打印这两个值,他们都得到a。 : 好像从来没有打印出地址的情况。
| z*y 发帖数: 1311 | 7 你用两个字符的串就可以看出端倪了
p[0]指整个字串,*p[0]是这个字串的第一个字符
其它数组也是一样,见例程
#include
main()
{
char *p[3]={"ab", "c", "d"};
printf("%s\n", p[0]);
printf("%c\n", *p[0]);
int a[] = {0, 1, 2};
printf("%d\n", *a);
} | N******n 发帖数: 3003 | 8
明白了,谢谢
【在 z*y 的大作中提到】 : 你用两个字符的串就可以看出端倪了 : p[0]指整个字串,*p[0]是这个字串的第一个字符 : 其它数组也是一样,见例程 : #include : main() : { : char *p[3]={"ab", "c", "d"}; : printf("%s\n", p[0]); : printf("%c\n", *p[0]); : int a[] = {0, 1, 2};
|
|