------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、指针的的定义
1. 格式:变量类型 * 变量名
int * p
2. 作用:指针就一个作用,能够根据一个地址值,找到对应的存储空间
3. int *p; //定义了一个指针变量p,p的作用在于存储地址
int a = 10;
p = &a; //指针变量p指向了变量a的地址
*p=20; // 访问指针变量p指向的存储空间,并把a的值改为20
printf(“%d”, *p);
4. 指针变量p前面的 int表示指针变量只能指向int类型的数据
*指针的使用注意:
(1)int *p 只能指向int类型的数据
(2)指针变量只能存储地址 (int*p p=20 这种写法是错误的)
(3)指针变量未经过初始化,不要拿来直接访问其他存储空间 (int*p; printf("%d\n,*p")这种写法也是错误的)
5. int *p ; p=&a 等价于 int *p = &a
6. 所有类型的指针都占8个字节
7. 指向指针的指针
int **pp
二、指针和函数
1. 指向函数的指针
int *p(int ,int);
p=test; //定义一个指针变量p指向test函数
p左边的int:指针变量p指向的函数返回int类型的数据
p右边的int:指针变量p指向的函数有两个int类型的形参
2. 返回指针的函数
char * test () //test 函数返回一个char类型的指针
{
}
三、指针和数组
1. 指针访问数组元素
int ages[5]={10,9,8,67,56};
int *p;
p=&ages[0]; //指针变量p指向数组的首元素,也可以写成p=ages,因为数组名就是数组的地址,也是数组首元素的地址
此时的 p--->&ages[0]
p+1--->&ages[1]
..............
p+i--->&ages[i]
*结 论:数组元素的访问方式有三种
(1)数组名[下标] ages[i]
(2)指针变量名[下标] p[i]
(3)*(p+i)
2. 指针遍历数组元素
for (int i=0;i<5,i++)
{
printf("ages[%d]=%d\n",i, *(p+1));
}
3. 指针数组
char *names[5]={"jack","rose"}
四、指针和字符串
1. 指针字符串: char *name="it" //指针变量name指向字符串首字母
2. 字符串的输入
char name[20];
printf("请输入姓名:\n",name);
scanf("%s",name);