已知int a,*p=&a;输出指针pa十进制的地址值的方法是

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已知int a,*p=&a;输出指针pa十进制的地址值的方法是相关的知识,希望对你有一定的参考价值。

参考技术A 如果是输出指针p十进制的地址值是这样的:printf("%d\n",&p);
如果是输出a的地址值是这样:printf("%d\n",p);
参考技术B long int iAddress;
int a;
int *p = &a;

i Address = p; //这里就是p的地址,如果报错换成 iAddress = int(p);
参考技术C a=(int)p;
显示a就可以看到指针值

关于数组和指针的一道例题的解读

#include <stdio.h>
int main(int argc, char *argv[])
{
    int a[3]={1,2,3};
    int (*pa)[3];
//  *pa=a; //错误,因为pa没有被赋值,怎么取值,语法错误。
    pa=&a; //正确,&a为指向数组的地址,和pa类型匹配
    printf("*pa=%p\n",*pa); //正确,*pa含义为:对pa解引用,得到数组a的地址。
    printf("*pa+1=%p\n",*pa+1); //正确,*pa+1:先计算*pa(相当于数组名,默认被编译器自动转换为数组>首元素首地址)得到数组首元素地址,然后加1,移动4个字节
    printf("*(pa+1)=%p\n",*(pa+1)); //正确,*(pa+1):先计算(pa+1),因为pa为数组首地址(注意不是数组首
元素地址)类型是整个数组,所以(pa+1)移动了整个数组的字节数,也就是12个字节。
        
    printf("&*pa=%p\n",&*pa);//正确,由这个可以看出(*pa)被编译器看作是数组名,因为对数组名取地址得>到的指针类型是整个数组结构。
    printf("&*pa+1=%p\n",&*pa+1);//结果是移动了12个字节,表明(&*pa)为指向数组的指针。
//  *pa=a; //错误,因为(*pa)为数组a的地址,是一个地址直接量,不可以改变。
//  *pa=&a;  //error
//  *pa=&a[0]; //error
//  *pa=*pa+1; //错误,同理(*pa)为一个地址直接量,不是左值,不能进行自加运算。
    *pa++;  //正确,自加的是pa不是(*pa),不信你可以试试:(*pa)++                                    
    printf("*pa=%p\n",*pa);
    
    

    return 0;
}

 

以上是关于已知int a,*p=&a;输出指针pa十进制的地址值的方法是的主要内容,如果未能解决你的问题,请参考以下文章

指针地址的输出

关于数组和指针的一道例题的解读

void *指针的加减运算

const和一二级指针

2019年7月11日星期四

typeof()关键字