c++ 区分字符串指针和数组指针

时间:2020-09-19 09:27:07   收藏:0   阅读:45
#include <iostream>

int main()
{
    //创建指向字符串的指针
    using namespace std;
    char str[999];
    cin >> str;
    char *pn = str;                     //字符串名被解释为其第一个元素的地址(cout对象认为char的地址是字符串的地址)
    cout << pn << endl;                 //向cout传递一个字符串的第一个元素的地址,依次打印字符串元素直至空字符为止
                                     //不需要cout<<*pn;这样只会打印第一个元素
    char(*pn_all)[999] = &str;       //注意这里要将(*pn)括起来否则[999]先与pn结合形成指针数组
    cout << *pn_all<<endl;           //这里输出一整个字符串,因为pn_all是指向整个字符串数组的指针

    cout << (int*)str << endl;         //显示字符串地址,必须将字符串指针强制转换为另一种指针类型
    cout << (double*)pn << endl;     //字符串指针同理
    
    //数组的地址含义理解
    int test[10] = { 0,1,2,3,4 };
    cout << test << endl;            //数组名也被解释为其第一个元素的地址,但和字符串区分,cout不会打印数组,而是打印&test[0]   (04FF718)
    cout << &test << endl;            //对数组名应用地址运算符时,得到整个数组的地址,从数字上来说和前者相同                        (004FF718)
                                    //但从概念上来讲&test[0]是一个4字节内存块的地址,&test则是一个40字节内存块的地址
                                    //因此,test+1,将地址值加4,而&test+1将地址值加40
    cout << test + 1 << endl;        //Output:004FF71C
    cout << &test + 1 << endl;        //Output:004FF740
    
    //理解&test的含义
    int(*pas)[10] = &test;            //如果省略括号,优先级规则将使pas先与[20]结合,导致pas是一个包含20个元素指针数组
    cout << pas << endl;            //Output:004FF718
        
    int *pt;                        //显示指针地址,即数组第一个元素的地址
    pt = test;                        //Output:004FF718
    cout << pt << endl;
}

 

 

原文:https://www.cnblogs.com/mazesbegin/p/13694122.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!