gpt4 book ai didi

c++ - CPP 中的指针,对示例程序的混淆

转载 作者:太空狗 更新时间:2023-10-29 19:48:06 27 4
gpt4 key购买 nike

通过加速 C++ 工作。有一个例子,其中有很多我不明白的地方。

double grade = 88;

static const double numbers[] = { 97,94,90,87,84,80,77,74,70,60,0 };

static const char* const letters[] = { "A+","A","A-","B+","B","B-","C+","C","C-","D","F" };

static const size_t ngrades = sizeof(numbers) / sizeof(*numbers);

for (size_t i = 0;i < ngrades;++i) {
if (grade >= numbers[i]) {
cout << letters[i];
break;
}
}
  1. 我不明白 static const char* const letters[] = (...) 是怎么回事。首先,我一直认为 char 是由 '.由 "分隔的单个或多个字符对我来说是一个字符串。
  2. 我对指针的理解是它们是一个表示对象地址的值,尽管它会被初始化为 int* p=&x;。它们的优点是可以像迭代器(某种)一样使用。但我真的不明白这里发生了什么,我们声明了一个指针字母,它被分配给它一个值数组(不是地址),这是什么意思?这样做的原因是什么?
  3. 我知道java中的static是什么意思,在CPP中是不是类似的意思?作者写道,这意味着编译器只会初始化静态值一次。但这不是对特定范围内的每个变量都完成的吗?我在调试中注意到,我似乎在第一次执行后跳过了这些值。但这是否意味着即使在我的程序运行完毕后,这些静态值仍会保存?这对我来说似乎不合逻辑。

最佳答案

关于您的第一个问题,字符串文字(例如 "A+")是一个(只读)字符数组,并且作为所有数组,它们都可以衰减到指向其第一个元素的指针,即指向 char 的指针。变量 letters 是指向常量字符的常量指针数组(数组中的指针不能更改)。

对于第三个问题,static 的含义因您声明变量的作用域而异。在全局作用域中使用时,它是一个链接说明符,表示变量(或函数)不会从 translation unit 导出.如果在局部范围内(即函数内部)使用变量,则变量将在函数的调用之间共享,即对函数的所有调用都将具有相同的变量,并且在调用之间保留变量的值。将类成员声明为 static 意味着它在该类的所有对象实例之间共享。

关于c++ - CPP 中的指针,对示例程序的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33777099/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com