1、 //整形指针指向整型变量的指针
int *p = NULL;//指针的标识,告诉编译器这是个指针变量
int a = 10;
p = &a;
printf("%d\n",*p);//取出指针变量p指向内存中的值
*p = 20;//*向指针变量p指向的内存中存储数据
//浮点型指针:指向浮点型变量指针;
float *p1 = NULL;
float b = 3.14;
p1 = &b; printf("%.2f\n",*p1);
//字符型指针:指向字符型变量的指针
char *p2 = NULL;
char c = 'a';
p2 = &c;
printf("%c\n",*p2);
//总结:什么类型的指针,就是这个指针指向什么类型的变量
2、结构体指针的格式
指针的定义的格式:类型标示符 *指针变量名 =初始值;
结构体的首地址,就是结构体第一个成员变量的首地址
// int *p1 = NULL;
// int a = 20;
// p1 = &a;
// *p1 等价于 a
// -> 指向操作符
// -> 前面只能是结构体指针变量,而且必须是指向结构体变量首地址的结构体指针变量
3、经典例题——————————————————
//定义一个老师的结构变量“LiWu hua”
//通过结构体指针将姓名中的首字母改为大写,并把' ' 改为'_';
// Teacher teacher2 = {"xia yin jun",30,"playPlane"};
// t = &teacher2;//指针的重指向
// if (t->name[0] >= 'a' && t->name[0] <= 'z') {
// t->name[0] -= 32;
// }
//
// int i = 0;
// while (t->name[i] != '\0') {
// if (t->name[i] == ' ') {
// t->name[i] = '_';
// }
// i++;
// }
// printf("%s%d %s\n",t->name,t->age,t->hobby);
4、公式:
//结构体数组和指针
Student stu[5] = {
{1,"guanXi",'m',19,90},
{3,"tingFeng",'m',20,91},
{2,"boZhi",'w',18,99},
{5,"liZongRui",'y',30,59},
{4,"zhaoSi",'y',40,100}
};
数组名就是指针,指向数组的首地址,数组首个元素的地址
*stu : stu[0]
*(stu + 1) : stu[1]
*(stu + 2) : stu[2]
*(stu + 3) : stu[3]
*(stu + 4) : stu[4]
*(stu + 5) : stu[5]
//访问数组中元素的姓名成员变量
// (*stu).name : stu[0].name
//(*(stu+1)).name : stu[1].name
//(*(stu+2)).name : stu[2].name
//(*(stu+3)).name : stu[3].name
//(*(stu+4)).name : stu[4].name
//(*(stu+5)).name : stu[5].name
printf("%s\n",(*stu).name);1
printf("%s\n",stu[0].name);
// ->使用指向操作符访问数组中元素
//stu ->name : stu[0].name
//(stu + 1) ->name : stu[1].name
//(stu + 2) ->name : stu[2].name
//(stu + 3) ->name : stu[3].name
//(stu + 4) ->name : stu[4].name
printf("%s\n",stu->name);
printf("%s\n",(stu +1) ->name );
//将数组中的第四个元素的名字改为“aJiao”
strcpy((stu +3)->name, "aJiao");
printf("%s\n",(stu + 3)->name);
5、 区别
//str 数组中存储的字符串是从常量去拷贝过来的,放到自己的空间里这时修改数组中的数据,没有影响到常量区内容;
// char str[] = "iPhone";
// char *p1 = str;
// p1[1] = 'p';
// printf("%s\n",p1);
//*p2指向的是常量区的字符串,常量区的内容是不允许修改的,这时指针p2只拥有访问权,没有修改权
// char *p2 = "iPhone";
// p2[1]= 'p'; error !!!
// printf("%s\n",p2);
转自:http://blog.csdn.net/qq_31810357