指针和数组内存

时间:2018-08-18 03:25:06

标签: c++ arrays string pointers

我对以下代码的输出感到困惑:

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

请说明两个数组中的内存分配情况。

1 个答案:

答案 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
相关问题