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