美文网首页C++
char (*str)[2] 与 char * str[2]

char (*str)[2] 与 char * str[2]

作者: Kai_Z | 来源:发表于2018-04-11 11:03 被阅读2次

简介

该文章主要介绍char (*str)[2]char * str[2]之间的区别,其实也就是我们经常所说的数组指针指针数组的区别。

ps:之所以选用char (*str)[2] 与 char * str[2]作为文章题目而不是数组指针指针数组,个人认为后者太容易搞混了,感觉还是记住两句代码更简单点。

char *str[2]

这就是我们常说的指针数组(array of pointrs)

  • 首先这是一个数组,数组中包含两个数据
  • 数组中包含的数据为char类型的指针

例程

#include <iostream>
int main()
{
    char s[2] = { 'Z','K' };
    char *str[2];
    str[0] = &s[0];
    str[1] = &s[1];
    std::cout << "sizeof(str):"
        << sizeof(str) << std::endl;
    std::cout << "s[0] address:" << (void*)str[0] << "\n";
    std::cout << "s[1] address:" << (void*)str[1] << "\n";
    system("pause");
    return 0;
}
//输出结果
sizeof(str):8
s[0] address:004FFD78
s[1] address:004FFD79
  • sizeof(str):8 因为str数组包含两个指针,所以长度是8
  • 存储的两个地址为0x004FFD78与0x004FFD79,因为指向的是两个char,所以地址相差一个字节

char(*str)[2]

这就是常说的数组指针(a pointer to an array).

  • 首先它是一个指针
  • 该指针指向一个char[2]的数组,且只能指向一个char[2]的数组

例程

#include <iostream>

int main()
{
    char s[2] = { 'Z','K'};
    char (*str)[2];
    str = &s; //注意这里的&符号,这里我们把s[2]作为一个整体,当取址的时候,需要使用取址符
    std::cout << "sizeof (*str):" << sizeof(str) << "\n";
    std::cout << "s[0] address:" << (void*)&s[0] << "\n";
    std::cout << "str:" << str << "\n";
    std::cout << "str+1:" << (str + 1) << "\n";
    system("pause");
    return 0;
}
//输出结果
sizeof (*str):4
s[0] address:0026F950
str:0026F950
str+1:0026F952
  • sizeof(*str):4 因为str只是一个指针而已,所以长度为4
  • str所存储的地址与s[0]的地址是相同的,为char[2]的首地址
  • str+1得到的结果与str相差两个字节,因为str指向的是一个数组,所以当指向加1操作的时候,相加的值为数组的总长度

相关文章

网友评论

    本文标题:char (*str)[2] 与 char * str[2]

    本文链接:https://www.haomeiwen.com/subject/qkdnhftx.html