c程序问题13---关于指针 2---指针定义

背景:
定义指针变量时, 定义方法是 *p ,如果定义数组 a[ 10 ],要传递数组地址给指针变量p。 可以两种,
a. 定义的时候传递,
int a[10], *p = a;

b. 定义结束后传递
Int a[10], *p;
P = a;

问题:
1. 这样的说法是否正确, 在定义指针变量和对指针变量赋值 ( ? )时, 具体注意哪些问题?

2. 上面的背景叙述中,传递数组地址给指针变量怎么理解更好些?

清空你原有的概念,我来帮你灌输下= = ;
首先帮你分析第一个: int a[10],*p = a;
在定义时 按照从左往右的方法定义 不知道你这个有没有意见,如果没有那你首先定义了一个数组 int 整形a[10],之后又定义了int *p 对不对,那在这个符号之前“=”,你的a已经是个数组,而a又代表了一个int数组的首地址,同时你的p已经被定义为一个存放int类型的指针,这时你再将a的地址给它了。于是*p就等于你数组a的第一个值了,不知道这样说你清不清楚。因此我int *p=a;你可以理解为两部操作 就是分解为 int *p; p=a;
相信第二个就不用我解释了吧= = 说这么清楚了 望加分啊~~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-12
我觉得你的理解有一些偏差。
定义一个指针变量int *p,其实指针变量是p,它的类型是int*也就是指向整型的指针。所以对指针变量赋值是自然是p=...。
在定义的同时赋值 int *p=a其实也是在给p赋值,并不是给*p赋值。
总之你这样理解就好int *p等同于(int *)p追问

再问下,请解答, 谢谢。
int a[10];
/* 代码不写全了哈 */
int *p, b;
p = a;
b = *p.
/* 问题: 这里的*p应该是一个元素值(数组的首元素--如果有错, 请指正),那么这里的 * 怎么理解? */

追答

*p是数组首元素没错,因为p=a表示p这个指针变量等于数组a的地址也即首元素的地址。*表示获取地址中的值,所以*p就表示通过数组a首元素的地址取首元素的值。

本回答被提问者采纳
第2个回答  2011-08-12
你可以这样理解,数组就是一个指针,但是它是一个指针常量,不能改变,相当于定义了一个cosnt *的指针,大家都知道,常量是不能赋值,不能改变的,这就把数组和指针经常容易混淆的地方区分开了,另外,指针定义后必须初始化后才能使用,否则会出错,但是数组,没有这一点要求
第3个回答  2011-08-12
p为指针
a为数组,p = a;即为将数组a的首地址传给指针p
第4个回答  2011-08-12
就是这样写,定义指针*p后,p表示指针,*p是取p指向的内容了