指针的一些问题

如果

int  a[] = {1, 2, 3};

int * pa = a + 15;   //  指针偏移   指针变量加上一个偏移   那么它的实际地址为a的地址+sizeof(a)*偏移大小

printf("%d", pa); // 输出a地址的大小+sizeof(int)*15;


又如:

int*  pa = NULL;  // 这里是声明指针pa并给他的地址赋值为0,也就是pa变量保存的值为0,而0地址中存放的值(也就是我们通常意义上所谓的pa指向变量的内容)是未知的,很有可能是系统非法访问的。

int* pb = pa + 15;

printf(“%d”, pb); // 60  指针变量中的值就是0 + 15*4

printf(“%d”, *pb);// 很有可能报错, 因为有很多地址的是不能够访问,所以它所指向的内存内容是不可打印的。    


另外,

(1)

 char* str = "123"

cout << str << endl;     // 123  它的原理跟printf打印字符串一样 打印的是指针指向的内容

printf("%s", str);            // 123


cout << &str <<endl; // 输出的是指针变量str的地址,而不是“123”的首地址

printf(“%x”,&str)// 同上


那怎么获得(打印)“123”的首地址呢?

printf("%p\n", str); // 改一下打印控制符就可以了打印的是字符串 首地址

printf("%p\n", &str[1]); // 打印的是第二个字符的地址

当然

cout <<(void*)str <<endl; // 输出的也是字符串的首地址

(2)

int*  p = (int*)malloc(sizeof(int)*10);

p[0] = 1;

p[1] =2;

p[3]=3;


cout << p <<endl; // 打印的是p的内容,即p中存放的地址(也是申请的一块空间首地址)

cout<<&p<<endl; // 打印的是p的地址,存放指针变量p的地址





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值