C语言typedef用法问题

碰到个题,求大佬指点..
题:
设typedef char STRING[255];STRING*s;,则s是( )
A.字符数组
B.字符变量
C.字符指针数组
D.字符指针变量

答案是C,为啥不是D呢?这里的 指针s是怎么指向数组的啊?

阅读 2.8k
2 个回答

答案是,指向 字符数组 的指针变量。

它也不是一个 字符指针的 数组。

typedef char STRING[255];

int main() {
    char arr[255];

    // 指向 字符数组的指针
    // arr 是字符数组
    // s 中保存了字符数组的地址
    // 相当于 char (*s)[255]
    STRING *s;
    s = &arr;
    
    // 字符指针的数组
    // 数组的每个元素是一个字符指针
    char ch = 'a';
    char *ptr_arr[255];
    ptr_arr[0] = &ch;

    return 0;
}

STRING为有255个char元素的数组,STRING *s则为指向有255个char *元素的数组,其中每个char *都指向char[255]

typedef char STRING[255];STRING *s;

STRING *s 等价 (*s)char *[255];

使用typeinfo打印变量类型

#include <iostream>
#include <typeinfo>

using namespace std;

typedef char STRING[255];

int main()
{
    STRING s1 = {0};
    STRING *s2;

    cout << "s1 type:" << typeid(s1).name() << endl;
    cout << "*s2 type:" << typeid(s2).name() << endl;
    cout << "s2[0] type:" << typeid(s2[0]).name() << endl;

    return 0;
}

output:
[root@typedef]# g++ typedef.cpp
[root@typedef]# ./a.out
s1 type:A255_c
*s2 type:PA255_c
s2[0] type:A255_c
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题