📅  最后修改于: 2020-10-16 06:42:11             🧑  作者: Mango
数组和指针彼此紧密相关。在C++中,数组的名称被认为是“指针”,即,数组的名称包含元素的地址。 C++将数组名称视为第一个元素的地址。例如,如果我们创建一个数组,即保存20个整数类型值的标记,则标记将包含第一个元素的地址,即marks [0]。因此,我们可以说数组名称(标记)是一个指针,它保存着数组第一个元素的地址。
让我们通过一个例子来了解这种情况。
#include
using namespace std;
int main()
{
int *ptr; // integer pointer declaration
int marks[10]; // marks array declaration
std::cout << "Enter the elements of an array :" << std::endl;
for(int i=0;i<10;i++)
{
cin>>marks[i];
}
ptr=marks; // both marks and ptr pointing to the same element..
std::cout << "The value of *ptr is :" <<*ptr<< std::endl;
std::cout << "The value of *marks is :" <<*marks<
在上面的代码中,我们声明了一个整数指针和一个整数类型的数组。我们使用语句ptr = marks将标记的地址分配给ptr;这意味着变量“ marks”和“ ptr”都指向同一个元素,即marks [0]。当我们尝试print* ptr和* mark的值时,结果是一样的。因此,证明了数组名称存储了数组的第一个元素的地址。
输出量
指针数组是由指针类型的变量组成的数组,这意味着变量是指向其他元素的指针。假设我们创建一个包含5个整数指针的指针数组;那么其声明将如下所示:
int *ptr[5]; // array of 5 integer pointer.
在上面的声明中,我们声明了一个名为ptr的指针数组,它在内存中分配了5个整数指针。
指针数组的元素也可以通过分配其他元素的地址来初始化。让我们通过一个例子来观察这种情况。
int a; // variable declaration.
ptr[2] = &a;
在上面的代码中,我们将变量“ a”的地址分配给数组“ ptr”的第三个元素。
我们还可以通过取消引用指针来检索“ a”的值。
*ptr[2];
让我们通过一个例子来理解。
#include
using namespace std;
int main()
{
int ptr1[5]; // integer array declaration
int *ptr2[5]; // integer array of pointer declaration
std::cout << "Enter five numbers :" << std::endl;
for(int i=0;i<5;i++)
{
std::cin >> ptr1[i];
}
for(int i=0;i<5;i++)
{
ptr2[i]=&ptr1[i];
}
// printing the values of ptr1 array
std::cout << "The values are" << std::endl;
for(int i=0;i<5;i++)
{
std::cout << *ptr2[i] << std::endl;
}
}
在上面的代码中,我们声明了一个整数类型的数组和一个整数指针的数组。我们定义了“ for”循环,该循环遍历数组“ ptr1″的元素,并且在每次迭代中,索引为“ i”的ptr1元素的地址都存储在索引为“ i”的ptr2中。
输出量
到现在为止,我们已经了解了指向整数的指针数组。现在,我们将看到如何创建指向字符串的指针数组。
指针的字符串的数组是保存的字符串的第一个字符的地址,或者我们可以说一个字符串的基地址字符指针的阵列。
以下是指向字符串的指针数组和二维字符数组之间的区别:
让我们看看如何声明指向字符串的指针数组。
首先,我们声明一个指向字符串的指针数组:
char *names[5] = {"john",
"Peter",
"Marco",
"Devin",
"Ronan"};
在上面的代码中,我们将指针名称数组声明为大小为5的“名称”。在上述情况下,我们已经在声明时进行了初始化,因此我们无需提及a数组的大小。指针。上面的代码可以重写为:
char *names[ ] = {"john",
"Peter",
"Marco",
"Devin",
"Ronan"};
另外,在上述情况下,“名称”数组的每个元素是一个<字符串>,并且每个字符串字面量将举行的字符串的第一个字符的基地址。例如,names [0]包含“ john”的基地址,names [1]包含“ Peter”的基地址,依此类推。不能保证所有字符串字面量都存储在连续的存储位置中,但是字符串字面量的字符存储在连续的存储位置中。
让我们创建一个简单的示例。
#include
using namespace std;
int main()
{
char *names[5] = {"john",
"Peter",
"Marco",
"Devin",
"Ronan"};
for(int i=0;i<5;i++)
{
std::cout << names[i] << std::endl;
}
return 0;
}
在上面的代码中,我们已宣布字符指针保持5字符串字面量的阵列,并且每个字符串的第一个字符被保持在字符串的基地址。
输出量