c语言指针与数组地址常识

来源:百度知道 编辑:UC知道 时间:2024/05/08 16:51:57
int a[i];
int *p;
*p=a;
p=a;
第二句定义有没有问题?
第三句和第四句哪个对?

*号有两层意思:
一是在声明变量时表示该变量为指针型,但是在用该变量时,不带*号;
二是用使用一个已声明的指针型变量时,*号用来取该变量所指空间的内容。

第二句、第四句从语法上都正确。
如果直接赋值第二句可以这样写:
int *p = a;(试与后赋值的p = a对比)
如果不直接赋值,第二句最好写为:
int *p = NULL;

没有什么不对的
你那些都可以编译过去
重要的是你想写一条什么样的语句
int a[i]; //定义一个长度为i的int型数组 地址是a
int *p; //定义一个int型数指针p;
*p=a; //p指针所指向的地址的存放的数是a,也就是上面数组的首地址。不过这样的话因为定义指针p的时候并没有申请一个空间,所以这条执行之前要malloc一个整形大小的空间。
p=a;//p指针指向a的地址也就是说上面那个数组也可以看作是p[i]了

第二句最好声明为int *p=NULL;不过这样写没错。
第四句对,因为数组其实是指针的一种变体。

一维数组名本身就是数组中第一个数据的地址,记住是地址,p是地址,*p是取地址里的内容,所以int *p是可以的,p=a是对的.

int *p; 是可以的
*p=a;
p=a;
都不对,
应该是p = &a;