c++ - 将 c++ 数组分配给指针
问题描述
在这段代码中,我们创建了一个 const char 指针 id,因为它是一个 char,所以它应该只存储一个元素地址。但是在默认构造函数中,我们将“NULL”分配给该 id,该 id 是如何保存 4 个字符的?在参数化构造函数中,我们传递 i[] 数组并将值分配给 id,同样 char id 是如何保存完整数组的?进一步为什么我们需要 const char?
class Employee
{
public:
string name;
const char *id;
int age;
long salary;
Employee ()
{
name = "NULL";
id = "NULL";
age =0;
salary = 0;
};
// Employee(string n, char id[], int a, long s): name(n), id(id), age(a), salary(s)
// {};
Employee (string n,const char i[], int a, long s) //const use krne k baighar warning a rhe
{
name = n;
id = i;
age = a;
salary = s;
};
void getData()
{
cout<< "Employee ID: "<< id <<endl;
cout<< "Employee Name: "<< name <<endl;
cout<< "Employee Age: "<< age <<endl;
cout<< "Employee Salary: "<< salary <<endl;
};
};
我很困惑,如果 id 是 char 那么它如何保存 5 个字符的字符串文字。CHAR 类型只能存储单个字符,但如果我将其设为指针,则它包含多个字符。请清除这一点,我很困惑它是如何工作的。
解决方案
字符串字面"NULL"
量 , 是一个 5 char
s 的数组(第五个是空字符,表示字符串的结束)。C++ 中的数组在内存中按顺序排列。这意味着如果你有一个指向数组第一个元素的指针,你可以使用简单的算术找到后续元素。
因此,C++ 中的数组可以隐式转换为指向其第一个元素的指针。当你写 时id = "NULL"
,id
将被赋值为指向那个 5 个字符的数组的第一个字符('N'
在 的开头"NULL"
)。您的对象将在内存中布置,如下所示:
Employee
+--------+
| name |
| |
+--------+
| id |
| +----------+
+--------+ |
| age | v
| | +-+-+---+---+---+----+
+--------+ | N | U | L | L | \0 |
| salary | +---+---+---+---+----+
| |
+--------+
由于其余字符在内存中按顺序排列,因此您可以'U'
简单地通过将一个字节添加到存储在中的地址来找到第一个字节id
,然后'L'
通过添加两个字节等来找到第一个字节。您可以继续添加一个直到找到一个'\0'
字符,这表示您已到达字符串的末尾。
推荐阅读
- javascript - 弹出模式出现,但值没有更新,因为服务器端点击事件没有触发
- matlab - 导出为PDF后图中的白线
- c# - WPF C#来回移动黑白时出现错误两个组合框项目选择
- android - 未能以哈希字符串“android-O”为目标
- python - 在python中使用getattr动态映射函数名
- r-markdown - R Markdown 投影仪标题
- java - 尝试通过 JAVA 500 错误删除数据库行
- android - 如何在 Android API 24 及更高版本中接听电话?
- c# - 使用 ajax 传递时,字符串数组未正确投影
- javascript - 在跨度中包装创建的元素