① *p++ <=> *(p++)
先引用p的值,实现*p的运算,然后再使p自增1
②还有*(++p):先使p加1,再取*p。
③++(*p):表示p所指向的值加1。
④*(p--):先对p进行“*”运算,再使p自减
a[0]+1 <=> *(a+0)+1 都是&a[0][1]。
如若把*(a+1)+2写成*(a+1+2),后者变成*(a+3),相当于a[3]。
*(a[i]+j)与*(*(a+i)+j)是a[i][j]的值。
如果a是二维数组,则a[i]是一维数组名,他只是一个地址。
a+i,*(a+i),a[i]+j,*(a+i)+j都是地址 。
一个二维数组,a[0]是一维数组名,是一维数组中起始元素的地址,基类型:整形数据
a是二维数组名,是二维数组的首行起始地址,基类型:一维数组
二者的纯地址相同
若用一个指针变量pt来指向此一维数组:
```
int (*pt)[4];
```
-
一维数组名指向列元素。 在指向行的指针前面加一个*,就转换为指向列的指针; 在指向列的指针前面加一个&,就成为指向行的指针; &a[0] <=> & *a <=> a;
int a[2][3]={1,2,3,4,5,6};
int (*p)[3];
p=a;
int a[3]={1,2,3};
int (*p)[3];
p=&a;
在第一个代码中,p是一个行指针,基类型是一维整形数组,(p+2)就转换为列指针,(*(p+2)+3)就是a[2][3]的值。
- 可变格式输出函数
char *format;
format="a=%d,b=%f\n";
printf(format,a,b);
相当于
printf("a=%d,b=%f\n",a,b);
也可以用字符数组
char format[]="a=%d,b=%f\n";
printf(format,a,b);
但需注意 :“只能”采用在定义数组时初始化或逐个对元素赋值的方法,而不能用赋值语句对数组整体赋值。
新人,如有错误,请指正……
用的不熟练,格式有错误,将就一下,嘻嘻