一、指针变量
<一> 指针简介
指针是C语言中非常重要的数据类型,可以说不掌握指针就没有掌握C的精华。
我们可以通过地址找到所需的变量单元,地址指向该变量单元,因此地址形象化地称为“指针”。一个变量的地址称为该变量的指针,指针变量的值是地址,而且指针变量只能存放地址。指针变量就是用来存放地址的变量。
<二> 指针变量的定义
1、定义的格式
变量类型 *指针变量名;
int *p;// 定义了指针变量p
-
指针变量 p 只能指向 int 类型的数据
-
-
指针变量只能存储地址
-
-
指针作用:能够根据一个地址访问对应的存储空间
2、先定义后赋值
-
简单取值
int *p;// 定义了指针变量p
int a = 10;
p = &a; // 指针变量p指向了变量a
printf(“%d”, *p);
-
简单改值
*p = 9; // 访问指针变量p指向的存储空间,对其进行赋值
3、定义的同时赋值
int a= 10;
int *p= &a;
4、实现修改实参
void change(int *n)
{*n=10;}
函数调用完毕后,改变实参的值
<三> 指针实例
1、交换两个数的值
void swap(char *a, char *b)
{
int temp;
temp=*a;
*a = *b;
*b = temp;
}
2、利用指针间接返回多个值
int sumAndMinus(int a, int b, int *minus)
{
*minus=a-b;
reurn a+b;
}
<四> 指针探究
1、指针变量所占用的存储空间
任何指针都占用8个字节的存储
int *i;
char *c;
printf(“i=%zd,c=%zd\n”,sizeof(i),sizeof(c));
注:sizeof的返回值类型为unsigned long,%zd格式输出
2、为何指针变量要分类型?
示例:
int i = 2;
char c = 1;
char *p = &c;
printf("c的值为%d", *p);
结果为:c的值为1
int i = 2;
char c = 1;
int *p = &c;//注意区别,编译有警告
printf("c的值为%d", *p);
结果为:
c
的值为
513
分析:结果不同是因为指针变量类型不同
printf(“c的值为%d”, *p); *p表示从p所指向的存储空间取值,p为int类型,占4个字节,也就是从地址ffc8处开始取4个字节数据,取值为00000000 0000 0000 0000 0010 0000 0001
即十进制513。对于赋值*p=10;则会从起始地址开始把10存储在4个字节中。
所以指针分类型是为了赋值时要把数据存放在多少个字节内,取值时取出多少个字节内的数据。
<五>注意点