间接引用
如 将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读写变量a的值。这就是”间接引用”
总结一句:用来存放变量地址的变量,就称为”指针变量”。在上面的情况下,变量b就是个”指针变量”,我们可以说指针变量b指向变量a。
指针的定义
一般形式:类名标识符*指针变量名;
int*p;
float*q;
“*”是一个说明符,用来说明这个变量是个指针变量,是不能省略的,但它不属于变量名的一部分
前面的类型标识符表示指针变量所指向的变量的类型,而且只能指向这种类型的变量
指针的初始化
inta =10;int *p = &a; float b = 2.3f; float *q; q = &b;
指针运算符
给指针指向的变量赋值
char a = 10;
printf(“修改前,a的值:%d\n”, a);
// 指针变量p指向变量a
char *p = &a;//这个* 是定义指针的说明符
// 通过指针变量p间接修改变量a的值
*p = 9;//这个* 是指针运算符,表示 把9赋值给 指针指向的地址a,也就相当于 a = 9;
//这里 就是间接修改a的值
printf(“修改后,a的值:%d”, a);
取出指针所指向变量的值
char a = 10;
char *p;
p = &a;
char value = *p;//根据p值(即变量a的地址)访问对应的存储空间,并取出存储的内容(即取出变量a的值),赋值给value
printf(“取出a的值:%d”, value);
使用注意
在指针变量没有指向确定地址之前,不要对它所指的内容赋值。下面的写法是错误的
int*p;
*p =10;//这是错误的
应该在指针变量指向一个确定的变量后再进行赋值。下面的写法才是正确的
//定义2个int型变量
inta =6, b;
//定义一个指向变量b的指针变量p
int*p;
p= &b;
//将a的值赋值给变量b
*p = a;
例子
交换两个字符变量的地址(改变实参的值)
voidswap(char*p,char*q)
{
chartemp = *p;
*p = *q;
*q = temp;
}
intmain(intargc,constchar* argv[])
{
chara =‘A’, b =‘&’;
swap(&a, &b);
printf(“a=%c b=%c\n”, a, b);
}
用指针指向一维数组的元素
int a[2] = {2, 3}; int *p = &a[0]; *p = 10;那么a[0]应该等于10
数组名a的地址 与 它的第一个元素的地址相同, 所以 p = &a[0] 与 p = a 效果一样
指针来遍历数组元素
intary[] = {1,2,3,4,5};
int*q = ary;
for(inti =0; i <5; i++)
{
//数组内元素内存地址是连续的存储方式,指针移动一个对应类型单位字节数(int、char…),则指向下一个元素值
// printf(“数为:%d “, *(q+i)); //地址移动
// printf(“数为:%d “, *(ary+i)); //地址移动
printf(”数为:%d “, *(q++));//q=q+1,指针指向的地址移动
// printf(“数为:%d “, *(ary++)); //错误,常量不能赋值
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-55787-5.html
)这讲的是人话
还有日本的东西质量就是好