|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 tsembrace 于 2013-6-4 17:25 编辑
第一个问题:
看到谭浩强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是有区别的,区别在哪里呢?
|
|