我对以下代码的输出感到困惑:
char *s[]={"knowledge","is","power"};
char t[]={"Hello"};
char **p,*q;
p=s;
q=t;
cout<<++*p;
cout<<*p++;
cout<<++*p;
cout<<++*q;
现在,输出为nowledge nowlegde s I
。
请说明两个数组中的内存分配情况。
答案 0 :(得分:4)
char *s[] = {"knowledge", "is", "power"};
===========================================================
addr1: | 'k' | 'n' | 'o' | 'w' | 'l' | 'e' | 'd' | 'g' | 'e' | 0 |
===========================================================
=================
addr2: | 'i' | 's' | 0 |
=================
===================================
addr3: | 'p' | 'o' | 'w' | 'e' | 'r' | 0 |
===================================
=========================
addr4: | addr1 | addr2 | addr3 |
=========================
s: addr4
。
char *t[] = {"Hello"};
===================================
addr5: | 'H' | 'e' | 'l' | 'l' | 'o' | 0 |
===================================
=========
addr6: | addr5 |
=========
t: addr6
。
char **p,**q;
p=s;
q=t;
p: addr4
q: addr6
。
++*p;
p: addr4
*p: addr1
++*p: addr1 + 1
(!) *p: addr1 + 1
。
*p++;
p: addr4
*p: addr1 + 1
*p++: addr1 + 1
(!) p: addr4 + 1
。
++*p;
p: addr4 + 1
*p: addr2
++*p: addr2 + 1
(!) *p: addr2 + 1
。
++*q;
q: addr6
*q: addr5
++*q: addr5 + 1
(!) *q: addr5 + 1