一.指针常量与常量指针
1. 指针常量
指针本身为常量且有const属性
特点:指针指向的地址不变,指向的值可以改变(这里的改变指通过指针进行改变)。
格式:类型 * const 变量1=&变量2
变量的数据类型—类型*
/*test1.c*/
#include<stdio.h>
main()
{
int i=2;
int j=3;
int * const p=&i;
*p = 8; /*正确,指针指向的值可以改变*/
p=&j; /*错误,指针指向的地址不变*/
}
2. 常量指针
指针指向的变量为常量且有const属性
特点:指针指向的值不变,指向的地址可以改变。
格式:const 类型 * 变量1=&变量2
变量的数据类型—const 类型 *
/*test2.c*/
#include<stdio.h>
main()
{
int i=2;
int j=3;
const int * p=&i;
*p=8; /*错误,指针指向的值不变*/
p=&j; /*正确,指针指向的地址可以改变*/
}
错误1:消除const属性
inta=6;
const int *p=&b; 正确
constint a=6;
int *p=&a; 错误,消除了const的属性
3. 指向常量的常量指针
特点:指针指向的值和地址都不变。
格式:const 类型 * const 变量1=&变量2
二.按值传递和按地址传递
1.按值传递
在实参和形参之间以值的形式传递,改变形参值对实参无影响。
在调用函数时,将实参的值进行拷贝传递给形参,对形参的任何操作本质上是在对拷贝进行操作。
注意:在调用过程中,实参的地址不会改变
2.按地址传递
在实参和形参之间以地址形式传递,可以通过改变形参值今进而改变实参值。
在调用函数时,将实参的地址传递给形参,对形参操作本质上是对实参地址的值进行操作(即间接寻址)。
注意:在调用过程中,实参的地址可能发生改变(空调用地址不变),用const防止其地址改变。
函数调用期间,修改主调函数中的数组,被调函数需要的参数:
(1) 数组第一个元素的地址(即第一个字节的地址)
(2) 数组的长度
三.指针数组与数组指针
1.指针数组(存储指针的数组)
首先它是一个数组,然后是指针,是i个具有指针类型的数组元素。
int *p[i] p(数组名)