C语言指针与数组

来源:百度知道 编辑:UC知道 时间:2024/09/24 10:40:53
在C语言中,用指针或是数组方式访问变量:
1.int a,*p=&a;
2.int *p;p=&a;
3.int *p;*p=a;
上面的3个初始化有什么不同的,特别是第1个中的&a不是表示把a的地址赋值给了*p,a的地址作为了p的值了吗??
对于1中的一直认为该写成int a,*p=a;能给样解释,为什么不是 int a,*p=a;这样的!!??

1,2个如上楼:
第三个可能会有些问题,因为 int*p,
只是申请了一个指针变量的空间(这个空间叫做p)
,即此时只能有 p=&a的操作。而*p=a表示
指针p所指的空间(这个空间不是p),而此时指针
并未指向任何空间,所以赋指操作是错误的!

1.从右向左执行,先将&a赋给p,再定义int类型的*p
2和1是一样的。

注意 int *p = &a;相当于 int *p ; p=&a; 因为申明int *p ;的*是说明符 说明P是指针变量 而*p=a;中的*是解引用符

第一种声明,即int *p=&a;这只是指针的声明方式,它并不代表把a的地址取出然后赋给p所指向的值,而是表明将p这个指针指向变量a.它只是c++指针声明的规范问题,多想想就应该明白了

2,3中p=&a; p=&a;是赋值语句。1中int *p=&a是数值初始化,*表示p的类型是指针变量,用于和普通变量作区别。
其实这三个作用是一样的。