指针与数组名

指针的类别就是其+1的时候移动多少,包括所指向变量的类型和个数

指针有两个来源

一是定义的

二是用&取出的,此时指针的类别为被&的变量的类别

指针直接sizeof值为4,数组名直接sizeof值为数组大小

指针用*解引用然后sizeof值为所指向结构的大小

故指针与数组名不是同一类变量

————————

int b[5][5];

b[0]是数组名,不是指针,sizeof(b[0])=4*5=20

————————

运算符优先级() > [] > * > &

int (*a)[5];  //a为数组指针

int *b[5];    //b为指针数组

————————

int a[5];

int *p1;

int (*p2)[5];

sizeof(a)=20  sizeof(&a)=4  sizeof(*(&a))=20

sizeof(p1)=4  sizeof(p2)=4

sizeof(*p1)=4  sizeof(*p2)=20

————————

指针之间互相赋值需要类别相同,类别不同(包括类型不同和个数不同)

时会报error错误

将数组名赋给指针时,数组名传递的是第一个元素的指针(类别为第一个元素的类别)

数组名是不能作为左值的,两个相同类别的数组之间也不能直接整体赋值

int a[5], b[5];

int c[5][5];

int *p1;

int (*p2)[5];

int (*p3)[5][5];

p1 = a;     //对,数组名赋给指针

p1 = c[0];  //对,数组名赋给指针

p2 = c;     //对,数组名赋给指针

p2 = &a;    //对,指针直接互相赋值

p2 = &c[0]; //对,指针直接互相赋值

p3 = &c;    //对,指针直接互相赋值

a = b;      //错,数组不能直接整体赋值

————————–

int a[5];

sizeof(a)=20  sizeof(a+1)=4

在对数组名加减常量时,a依然表现为第一个元素的指针

故对于数组名,直接sizeof与用&取地址,表现为一个整体数组

赋值给指针和加减常量时,表现为第一个元素的指针

    原文作者:doubleXnine
    原文地址: https://blog.csdn.net/mumuriyue/article/details/79699881
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞