Inc*_*ito 27
第一个是数组,另一个是指针.
数组声明" char a[6];"请求留出六个字符的空格,以名称" a." 知道.也就是说,有一个名为" a" 的位置,其中可以包含六个字符.char *p;另一方面,指针声明" "请求保持指针的位置.指针将由名称" p," 知道,并且可以指向任何位置的任何char(或连续的chars数组).
声明
char a[] = "hello";
char *p = "world";
Run Code Online (Sandbox Code Playgroud)
会导致数据结构可以表示如下:
+---+---+---+---+---+---+
a: | h | e | l | l | o |\0 |
+---+---+---+---+---+---+
+-----+ +---+---+---+---+---+---+
p: | *======> | w | o | r | l | d |\0 |
+-----+ +---+---+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
重要的是要意识到像x [3]这样的引用根据x是数组还是指针生成不同的代码.鉴于上面的声明,当编译器看到表达式a [3]时,它会发出代码从位置"a"开始,然后移动三个,然后在那里获取字符.当它看到表达式p [3]时,它会发出代码从位置"p"开始,在那里获取指针值,向指针添加三个,最后获取指向的字符.在上面的例子中,[3]和p [3]碰巧都是字符"l",但编译器以不同的方式得到它们.
您可以使用搜索,在互联网上有关于该主题的大量解释.
char a[]="string";// a是一个字符数组.
char *p="string";// p是具有静态分配的字符串文字.任何修改内容的尝试都会p导致未定义的行为,因为字符串文字存储在内存的只读部分中.
| 归档时间: |
|
| 查看次数: |
26335 次 |
| 最近记录: |