1、指针?什么是指针?从根本上看,指针(pointer)是一个值为内存地址的变量(或数据对象)。正如char类型变量的值是字符,int类型变量的值是整数,指针变量的值是地址。
假设一个指针变量名是pa,可以编写如下语句:
pa = &b; // 把b的地址赋给pa,也说把pa指向b
现在pa的值是b的地址。
2、要创建指针变量,先要声明指针变量的类型。而指针变量的类型是和它指向的地址里存放的变量的数据类型一致。
假设想把pa声明为储存int类型变量地址的指针。
int *pa = &a; // 给出储存在指针pa指向a的地址上的值
使用间接运算符*(indirection operator)找出储存在a中的值。
*取值
pa = &a; // 把pa指向a,现在pa的值是a的地址。
val = *pa; // 通过*访问pa存放的a的地址,然后这个地址放的是a的值,称为:找出pa指向的值
以上两行代码放在一起相当于下面的语句:
val = a;
上图展示了字符变量a的地址是10000,它存放了字符F,占了一个字节。
指针变量pa的地址是11000-11003,它存放了整型变量10000,是字符变量a的地址,占了四个字节。
&nurse表示变量nurse的地址。
*后跟一个指针名或地址时,*给出储存在指针指向地址上的值。
#include <stdio.h>
int main()
{
char a = 'F';
int f = 123;
char *pa = &a;
int *pb = &f;
printf("a = %c\n",*pa);
printf("f = %d\n",*pb);
printf("a = %p\n",pa);
printf("f = %p\n",pb);
return 0;
}
对指针变量做运算
#include <stdio.h>
int main()
{
char a = 'F';
int f = 123;
char *pa = &a;
int *pb = &f;
printf("a = %c\n",*pa);
printf("f = %d\n",*pb);
*pa = 'C';
*pb +=1;
printf("now, a = %c\n",*pa);
printf("now, f = %d\n",*pb);
printf("size of pa = %d\n",sizeof(pa));
printf("size of pb = %d\n",sizeof(pb));
return 0;
}