【问题标题】:Pointer and array memory指针和数组内存
【发布时间】:2018-08-18 03:25:05
【问题描述】:

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

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。

请解释两个数组中的内存分配是如何发生的。

【问题讨论】:

标签: c++ arrays string pointers


【解决方案1】:
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

【讨论】:

  • in *q 为什么它不打印“e”? @Max Vollmer 但它需要 H+1= 73+1=74。
  • char t[]={"Hello"}; 与 char *t[]={"Hello"}; 非常不同。您没有指向指向字符数组的指针数组的指针,而是有指向字符数组的指针。因此,当您取消引用该指针时,您不会得到指向 char 数组的指针,而是得到一个 char。因此,您正在增加一个字符,而不是一个指针。
猜你喜欢
  • 2015-12-10
  • 2012-03-15
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 2020-08-15
相关资源
最近更新 更多