C++指针学习

本文介绍了C++指针的基础知识,包括指针的理解、空指针、指针数组、多级指针以及指针在函数参数和返回值中的应用。通过实例代码解释了指针的工作原理和常见用法,帮助读者深入理解C++指针。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

30天试用过期,使用以下visual studio 2019密钥,亲测可用企业版的可用:

企业版:BF8Y8-GN2QH-T84XB-QVY3B-RC4DF

专业版:NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y

1、最简单的指针理解,基本上记着以下代码就行:

int var =2;
int* p=&var;

注意*的位置,放这里是最好理解的,解决了我很久的迷茫问题。
取变量var的地址赋给p,声明这是个指针。
2、空指针
空指针不指向任何对象,使用nullptr来初始化指针
菜鸟上这句话没看懂
在这里插入图片描述
正常的话

//int* p=NULL;过去用NULL,现在少用了
int* p=nullptr;
cout << p<<endl;

输出为00000000

如果改为

int* p =NULL;
cout << * p <<endl;

此时则报错
在这里插入图片描述
输入代码

int main()
{
    int var1;
    char var2[10];

    cout << "var1变量的地址: " << &var1 << endl;
    cout << "var2变量的地址: " << var2 << endl;

    system("pause");
}

竟然数组出现乱码情况
在这里插入图片描述
3、指针数组
如果指针指向int类型的数组,代码如下:

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];
cout << "Value of var["<<i<<"] = "<< *ptr[i] <<endl;
}

其输出为

Value of var[0] = 10
Value of var[0] = 100
Value of var[0] = 200

如果指针指向字符类型的指针数组来存储一个字符串列表

const  int MAX = 4;
int main()
{
const char *name[MAX] = {
                   "Zara Ali",
                   "Hina Ali",
                   "Nuha Ali",
                   "Sara Ali",
                   };

for (int i=0;i<MAX;i++)
{
cout <<"Value of names["<< "] = " << names[i]<<endl;
}

输出为

Value of names[0] = Zara Ali
Value of names[1] = Hina Ali
Value of names[2] = Nuha Ali
Value of names[3] = Sara Ali
4、指针的指针(多级间接寻址)
在这里插入图片描述

int main()
{
    int var;
    int* ptr;
    int** pptr;

    var = 3000;
    ptr = &var;
    pptr = &ptr;

    cout << "var的值为: " << var << endl;
    cout << "*ptr的值为: " << *ptr << endl;
    cout << "**pptr的值为: " << **pptr << endl;


    cout << "var的地址为: " << &var << endl;
    cout << "ptr的地址为: " << &ptr << endl;
    cout << "pptr的地址为: " << &(pptr) << endl;
    system("pause");
    return 0;
}

运行结果为

var的值为: 3000
*ptr的值为: 3000
**pptr的值为: 3000
var的地址为: 0097F78C
ptr的地址为: 0097F780
pptr的地址为: 0097F774

这个地方我一直没理解,ptr 是个指针,其值为ptr=&var;pptr也是个指针,其值为pptr=&var,**pptr=*ptr=var。我一直认为指针的指针

pptr是个地址,其实是搞错了,pptr是个地址,pptr=&ptr,而不是pptr=&ptr

把这个搞清楚了,指针的指针就清晰明了了。ptr、pptr代表的是指针指向的地址!!!
5、传递指针给函数
C++允许传递指针给函数,只需要简单声明函数参数为指针类型即可。

void getSeconds(unsigned long* par);

int main()
{
    unsigned long sec;
    getSeconds(&sec);

    cout << "Number of seconds: " << sec << endl;
    system("pause");
    return 0;
}

void getSeconds(unsigned long* par)
{
    *par = time(NULL);
    return;
}

能够接受指针作为参数的函数,也能接受数组作为参数:

double getAverage(int* arr, int size);

int main()
{
    int balance[5] = { 1000,2,3,17,50 };
    double avg;

 //   avg = getAverage(&balance[0], 5);
    avg = getAverage(balance, 5);

    cout << "Average value is: " << avg << endl;

    system("pause");
    return 0;

}

double getAverage(int* arr, int size)
{
    int i, sum = 0;
    double avg;

    for (i = 0; i < size; i++)
    {
        sum += arr[i];

    }

    avg = double(sum) / size;
    return avg;
}

6、从函数返回指针
这个还没搞懂,大致意思就是函数返回值是个指针吧

int* getRandom()
{
    static int r[10];
    srand((unsigned)time(NULL));
    for (int i = 0; i < 10; ++i)
    {
        r[i] = rand();
        cout << r[i] << endl;
    }

    return r;
}

int main()
{
    int* p;
    p = getRandom();
    for (int i = 0; i < 10; i++)
    {
        cout << "*(p+" << i << "): " << *(p + i) << endl;
    }
    system("pause");
    return 0;
}

输出为

12714
16286
28357
20152
15710
481
3880
29265
5511
15555
*(p+0): 12714
*(p+1): 16286
*(p+2): 28357
*(p+3): 20152
*(p+4): 15710
*(p+5): 481
*(p+6): 3880
*(p+7): 29265
*(p+8): 5511
*(p+9): 15555

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值