一个小程序, 指针里不容易发现的小错误
- // 该程序输出的结果不是你输入的那 10 个整数, 检查一下, 答案在下面
- #include<stdio.h>
- int main(void){
- int *p , i , a[10];
- p = a;
- for(i=0;i<10;i++){
- scanf("%d",p++);
- }
- printf("\n");
- for(i=0;i<10;i++,p++){
- printf("%d\n",*p);
- return 0;
- }
- }
- -------------------------------------------
- /*
- 一个小程序, 指针里不容易发现的小错误
- */
- #include<stdio.h>
- int main(void){
- int *p , i , a[10];
- p = a;
- for(i=0;i<10;i++){
- scanf("%d",p++);
- }
- printf("\n");
- p = p-10; // 因为第一个 for 循环将 p 的值增加了十次, 即指针 P 不再指向原来的数组, 所以输出的不是你输入的 10 个数 也可以改成 p = a;
- for(i=0;i<10;i++,p++){
- printf("%d\n",*p);
- return 0;
- }
- }
和我想的一样, 改了下 void, 直接复制过来了
原文 https://www.cnblogs.com/luanch/p/3390496.html
二维数组
二维数组中 a[3][4]
a *a a[0] &a[0] &a[0][0]都是指向第一个元素的地址
数组的第一位里面存的是指向的数组的第一位的地址,
二维数组指针变量说明的一般形式为:
类型说明符(* 指针变量名)[长度]
int p[4]和 int (p)[4]
- int *p[4]; // 定义一个指针数组, 该数组中每个元素是一个指针, 每个指针指向哪里就需要程序中后续再定义了.
- int (*p)[4]; // 定义一个数组指针, 该指针指向含 4 个元素的一维数组(数组中每个元素是 int 型).
区分 int p[n]; 和 int (p)[n]; 就要看运算符的优先级了.
int p[n]; 中, 运算符 [ ] 优先级高, 先与 p 结合成为一个数组, 再由 int 说明这是一个整型指针数组.
int (*p)[n]; 中 ( ) 优先级高, 首先说明 p 是一个指针, 指向一个整型的一维数组.
来源: http://www.bubuko.com/infodetail-3098951.html