@Arbalest-Laevatain
2018-05-17T12:54:28.000000Z
字数 1136
阅读 561
C语言
C++
int a[10];
for (i=0;i<10;i++)
printf("%d ",*(a+i));
int *p;
for (p=a;p<(a+10);p++)
printf("%d ",*p);
快速输入数据到数组中
for (p=a;p<a+10;p++)
{
scanf("%d",p);
}
int *p;
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
可知,a[0]、a[1]、a[2]均是一维数组名,也就是一个指针,所以二维数组名就是指向指针的指针
二维数组的有关指针:(表中的数值只是个例子)
表示形式 | 含义 | 值 |
---|---|---|
a | 二维数组名 | 2000 |
a[0]、*(a+0)、*a | 0行0列的元素的地址 | 2000 |
a+1、&a[1] | 1行的起始地址 | 2016 |
a[1]、*(a+1) | 1行0列的元素的地址 | 2016 |
a[1]+2、*(a+1)+2、&a[1][2] | 1行2列的元素的地址 | 2024 |
*(a[1]+2)、*(*(a+1)+2)、a[1][2] | 1行2列元素a[1][2]的值 | 6 |
注意:
上面有些指针变量虽然值(地址)相同,指向的元素也相同,但是它们的基类型是不一样的
例如:
a+1是 int(*)[4] 类型
a[1]则是 int* 类型
//*(p++)与*(++p)是不同的
//++(*p)
//*(p--)相当于a[i--]
//*(++p)
//*(--p) 同理
形参数组名是一个指针变量
而实参数组名则是一个固定的地址
1、
2、可以对字符指针变量赋值,但不能对字符数组名进行赋值
3、
4、
5、指针变量的值可以改变,但字符数组名则是一个常量,不可改变
函数名即函数的起始地址
Elemtype (*指针名)(参数列表);
//max函数的声明
int max(int, int);
//使用函数名调用max函数
c=max(a,b);
//使用函数指针来调用max函数
int *p(int,int);
p=max;
c=(*p)(a,b);
注意:
1、为什么定义指针的时候要加上参数列表?,就是因为这样做可以明确它要指向的函数类型,所以函数指针并不是什么函数都可以指向的,只用同返回值类型以及同参数列表的才行
2、指向函数后,是不能进行算术运算的
void fun(int(*x1)(int),int(*x2)(int)
{
}
int *p[4];
int(*p)[4];
//这是错的,是是指向一维数组的指针