指针数组和数组指针梳理

一、指针数组


可以理解为指针的数组,即元素为指针的数组
请看如下几组例子:

char *p = "abc";
char *q = "kk";

char *a[] = {p,q};  //指针数组


cout << "a为:  "<<a << endl;
cout << "*a为:  " << *a << endl;
cout << "a+1为:  " << a + 1 << endl;
cout << "*(a+1)为:  " << *(a + 1) << endl;
cout << "*a+1为:  " << *a + 1 << endl;

结果为:
这里写图片描述

关于a的初始化:

char *p, *q;
char *a[] = {p,q};  //不能通过编译
p="abc";
q="kk";

因为上面例子中指针数组中的元素p和q未被初始化,不能通过编译.

关于a的赋值:

char *p = "abc";
char *q = "kk";
char *r = "rr";
char *a[] = {p,q};  //指针数组
*a=r; //正确的赋值操作,等同于将r赋给p 等同于 a[0]=r;
*(a+1)=r; //给a的第二个元素赋值 等同于a[1]=r;

a的大小sizeof(a) = 元素个数 * 地址长度(32位为4,64位为8)

二、数组指针


数组指针,即指向数组的指针,常用于指向二维数组
如下代码:

#include <iostream>
using namespace std;
int main()
{
    int a[2][6] = { { 1, 2, 3, 4, 5, 6 }, { 11, 12, 13, 14, 15, 16 } };
    int(*p)[6] = a;

    cout << "p的大小为:" << sizeof(p) << endl;
    cout << "**p为:" << **p << endl;  //首个元素的值
    cout << "*p为:" << *p << endl;    //首个元素的地址
    cout << "p[0]为:" << p[0] << endl;//首个元素的地址
    cout << "p为:" << p<< endl;       //首个元素的地址

    cout << "a[0][1]元素表示为*(*p+1) :" << *(*p + 1) << endl;
    cout << "a[0][1]元素表示为*(p[0]+1) :" << *(*p + 1) << endl;
    cout << "a[1][0]元素表示为**(p+1) :" << **(p + 1) << endl;
    cout << "a[1][0]元素表示为*(p[1]) :" << *(p[1]) << endl;
    system("pause");
}

执行结果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值