指针数组的解释

名词解释

指针数组,顾名思义是一个数组,其中每个元素都是一个指针,可以指向任何类型的数据。换句话说,指针数组是一个元素为指针的数组。

举例

int* ptrArray[3];

这个数组有三个元素,每个元素都是一个 int* 类型的指针,可以分别指向一个 int 类型的变量。

实例分析一

#include <iostream>
int *ptr[MAX];

 
using namespace std;
const int MAX = 3;
 
int main ()
{
   int  var[MAX] = {10, 100, 200};
   int *ptr[MAX];
 
   for (int i = 0; i < MAX; i++)
   {
      ptr[i] = &var[i]; // 赋值为整数的地址
   }
   for (int i = 0; i < MAX; i++)
   {
      cout << "Value of var[" << i << "] = ";
      cout << *ptr[i] << endl;
   }
   return 0;
}

输出结果为:
Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200

实例分析二

#include <iostream>
 
using namespace std;
const int MAX = 4;
 
int main ()
{
 const char *names[MAX] = {
                   "Zara Ali",
                   "Hina Ali",
                   "Nuha Ali",
                   "Sara Ali",
   };
 
   for (int i = 0; i < MAX; i++)
   {
      cout << "Value of names[" << i << "] = ";
      cout << names[i] << endl;
   }
   return 0;
}

这里的names[i]是指针,指向了字符串常量,cout 将根据指针所指向的内存地址输出字符串的内容
输出结果为:
Value of names[0] = Zara Ali
Value of names[1] = Hina Ali
Value of names[2] = Nuha Ali
Value of names[3] = Sara Ali

如果代码为cout << *names[i] << endl;
运行结果为:
Value of names[0] = Z
Value of names[1] = H
Value of names[2] = N
Value of names[3] = S

由于指针数组 names 的元素是指向字符串常量的指针,因此 *names[i] 实际上获取了每个字符串的第一个字符。

小结

两个例子中:第一种赋值方式是将数组元素的地址赋给指针数组的元素,第二种赋值方式直接将字符串常量的地址赋给指针数组的元素。
数字和字符串在内存中的存储方式是不同的。

对于数字,当我们定义一个整数变量时,它会占用一个固定大小的内存空间,取决于数据类型。例如,int 类型通常占用 4 个字节的内存空间。变量名代表该内存地址中存储的整数值。

int num = 10;
在内存中,变量 num 的值 10 被存储在分配给 num 的内存空间中。

对于字符串,字符串常量一般以字符数组的形式存储在内存中。每个字符占用一个字节的内存空间。C++ 中的字符串常量以 null 结尾(即以 \0 结尾),所以需要额外的一个字节来存储 null 终止符。

const char* str = "Hello";
在内存中,字符串 “Hello” 被存储为一个字符数组,每个字符占用一个字节的内存空间。变量 str 存储的是指向字符串第一个字符的指针,即字符串的起始地址。

无论是数字还是字符串,变量的名字本身并不直接存储在内存中,而是被编译器转换为相应的内存地址来进行访问。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值