P

  • P

    int a=10。int p=a。这种情况,p与a是不同的变量,这里是将a的值赋给pint &p=a。即 p是a 的别名,p和a其实是同一个整形变量,两个占用同一块内存空间,如果有 p=15;那么a也是15,修改p与修改a是完全等价的。

    那么int *a。int * &p=a。很容易理解,把 int * 看成一个类型,a就是一个整型指针,p 是a的别名。

    地址计算

    地址可 以像整数一样用作运算的对象。由于地址所表示的是数据所在的存储区域的第一个位置,计算的结果使得指针变量指在数据存储区域的第一个位置上。因此,地址的计算是按照与整数的计算不同的方法进行的。

    指针变量的运算是根据该变量所指向的数据类型进行的。例如,设有char *P; int *q;当执++p;++q。

    这样两个递增语句时,由于字符型数据的大小是以1个字节为单位的,因此P被递增1;而由于整型数据的大小通常是以2个字节为单位的,因此q被递增2。p=p+4; q=q+4;时,指针变量P被加上4,而指针变量q则被加上8。由此可见,设P为指针变量,p+k的意思是由P所指向的数据后的第k个数据的地址,亦即P的值与k*sizeof(*p)之和。

    2021年12月26日
  • P

    p*
    如是出现在算术表达式中,这个星号就是乘号,表示相乘,如果是出现在声明中(如变量定义),那就表明p是一种数据类型,p*表示要声明这种类型的指针变量。

    *p
    依然可以表示相乘的运算,也可表示提取p指针指向的位置保存的值。例如:

    int a=9;
    int *p=a;

    printf("%d",*p);
    这个printf()调用中的*p表示提取p指针指向的地址(即变量a的地址)保存的值(即变量a的值)

    更多追问追答

    追问

    你这里有明显的语法错误,应改为:
    int *p=&a;

    int *p;
    p=&a;
    *p=a;

    追答

    哦,是的,十分报歉!少了一个取址操作符。应改为:

    int a=9;
    int *p=&a;

    printf("%d",*p);

    追问

    你的意思是说*p和p*没区别了,对吧?

    追答

    我的意思是说要看具体的程序,脱离具体的程序,就是上面分析的这样。
    2021年12月15日
  • P

    p*
    如是出现在算术表达式中,这个星号就是乘号,表示相乘,如果是出现在声明中(如变量定义),那就表明p是一种数据类型,p*表示要声明这种类型的指针变量。

    *p
    依然可以表示相乘的运算,也可表示提取p指针指向的位置保存的值。例如:

    int a=9;
    int *p=a;

    printf("%d",*p);
    这个printf()调用中的*p表示提取p指针指向的地址(即变量a的地址)保存的值(即变量a的值)

    更多追问追答

    追问

    你这里有明显的语法错误,应改为:
    int *p=&a;

    int *p;
    p=&a;
    *p=a;

    追答

    哦,是的,十分报歉!少了一个取址操作符。应改为:

    int a=9;
    int *p=&a;

    printf("%d",*p);

    追问

    你的意思是说*p和p*没区别了,对吧?

    追答

    我的意思是说要看具体的程序,脱离具体的程序,就是上面分析的这样。
    足球球星 2021年12月7日

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息