|  | 
 
| 
本帖最后由 tsembrace 于 2013-6-4 17:25 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 第一个问题:
 看到谭浩强C指针这章时,对于:
 int a[10],*p;
 p=a;
 这样的定义。数组名表示的是数组的首地址,p=a就是把数组首地址赋给p,这个理解没问题。
 对于表示数组元素a[0]等价于*p;a[1]等价于*(p+1);甚至第i个元素可以用p[i],也可以用*(a+i)表示;那么看到这里,问题是:p和a有差别么?除了定义时候理解的p为指向数组的指针变量和a为数组首地址外,他俩有什么差别?在应用方面可以相互替换吗?
 
 第二个问题:
 
 复制代码
void main()
{
int a[3],i=0,*p;
p=a;
printf("input 3 numbers:\n");
for(;i<3;i++) scanf("%d",&a[i]);
printf("a[0]=%d;a[1]=%d;a[2]=%d;\n",*p,*(p+1),*(p+2));        //--->可以实现依次输出
p=a;
printf("a[0]=%d;a[1]=%d;a[2]=%d;\n",*p++,*p++,*p);       //--->为何不行?
p=a;
printf("a[0]=%d;a[1]=%d;a[2]=%d;\n",*p,*(++p),*(++p));       //--->为何不行?
}
TC3下运行结果如下图:
 
   
 引申:用问题二来测试问题一(把printf中的参数换成a),运行如下,显示Lvalue required错误提示。那说明a和p是有区别的,区别在哪里呢?
 
 
 
 
 | 
 |