指针变量的赋值
指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值。未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址, 决不能赋予任何其它数据,否则将引起错误。在C语言中, 变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。 C语言中提供了地址运算符&来表示变量的地址。其一般形式为: & 变量名; 如&a变示变量a的地址,&b表示变量b的地址。 变量本身必须预先说明。设有指向整型变量的指针变量p,如要把整型变量a 的地址赋予p可以有以下两种方式:
(1)指针变量初始化的方法 int a;
int *p=&a;
(2)赋值语句的方法 int a;
int a;
char b;
int *p;//定义一个int型的指针变量p,p只能用来存储int型变量 的地址值
p=&a;
p=&b;//这是错误的
- 不允许把一个数赋予指针变量,故下面的赋值是错误的: int *p;p=1000;
- 被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的
指针运算符
(1)取地址运算符&
取地址运算符&是单目运算符,其结合性为自右至左,其功能是取变量的地址。在scanf函数及前面介绍指针变量赋值中使用了&运算符。
(2)取内容运算符
取内容运算符是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在运算符之后跟的变量必须是指针变量。需要注意的是指针运算符和指针变量说明中的指针说明符 不是一回事。在指针变量说明中,“”是类型说明符,表示其后的变量是指针类型。而表达式中出现的“”则是一个运算符用以表示指针变量所指的变量。
利用指针写swap函数
结果:输入a=1,b=2 输出a=1 b=2
没有交换的原因:p1 p2的值交换,a和b数据域未交换
void swap(int *p1,int *p2)//指针变量为出口参数
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
int main()
{
int a=1,b=2;
swap(&a,&b);//入口参数为地址值
printf(" a= %d b=%d \n",a,b);
return 0;
}
指针与数组
多维数组
创建二维数组array[3] [4]
指针与数组参数的四种方法
2.
3.
4.