由于本人觉得指针没有学好,所以在此详细的介绍一下。
1.简单的说,指针就是一种数据类型,用来表示内存地址
2.在C语言中,表示内存地址的数据类型就是指针类型,所以,地址就是指针型数据,一个变量的地址就是一个指针型常量,用来保存地址的变量就是一个指针型变量,通过指针访问内存空间的方式为间接方式。
3.普通变量有两个属性,而指针变量则关联到4个属性。
1)指针变量的地址,即为指针变量分配的内存空间的地址。
2)指针变量的值,即为内存空间的内容
3)以指针变量的值为地址的空间地址,也称为指针指向的空间地址。
4)指针指向的内存空间的内容
虽然指针变量的值和其指向空间地址的值是一样的,但实际上还是有本质的区别。指针变量的值,为一个内存空间的内容,是可以改变的。指针变量指向的空间的地址是一个内存空间的地址,这是一个常量,本身是不可改变的。
4.定义指针变量的标准形式如下:
数据类型名* 指针变量名
指针操作符*可以放在它俩中间的任意位置。
由于指针类型存储的是地址的值,因此,其字节长度由系统的内存地址长度决定。
下面测试一下指针类型的字节长度。
int main(int argc, char *argv[])
{
printf("sizeof(int*) = %d\n",sizeof(int*));
printf("sizeof(char*) = %d\n",sizeof(char*));
printf("sizeof(float*) = %d\n",sizeof(float*));
return 0;
}
输出结果都为4.
由此可见,指针类型所占空间为4个字符,与其指向的内存存储的数据类型无关。
5.指针变量的一次赋值。‘
为指针变量赋值就是为指针设定它指向的内存空间的过程。指针变量只能保存内存地址,因此给指针变量赋值时必须献给它一个地址。
char c = 'a';
char * cp;
cp = &c;
cp指向变量c的空间,要访问c的内容,就可以使用直接访问和间接访问两种方式。
printf("%c",c); //直接访问
printf("%c",*cp); //间接访问
下面写个小例子,演示如何使用指针访问和修改变量。
int main(int argc, char *argv[])
{
int a = 2;
int *b; //定义指针变量
b = &a; //使指针变量b指向a的内存空间
printf("\ta=%d\n",a);//通过变量a访问a的内存空间 a=2
printf("\t*b=%d\n",*b);//通过指针变量b访问a的空间 *b=2
*b = 3; //改变b指向空间的内容
printf("\ta=%d\n",a); //通过变量a访问a的内存空间 a=3
printf("\t*b=%d\n",*b);//通过指针变量b访问a的空间 *b=3
return 0;
}