指针
就是保存地址的变量
int i;
int* p = &i;
int* p,q;
int *p,q; 注意*号可以靠近int也可以靠近p,表达的意思一样都是,p是指针变量,q是int类型,没有int *类型
指针变量
普通变量的值是是实际的值
指针变量的值是具有实际值的变量的地址
作为参数的指针
void f(int *p);
在被调用的时候得到了某个变量的地址;
int i = 0; f(&i);
在函数里面可以通过这个指针访问外面的i;
#include <stdio.h>
void f(int *p);
int main(void)
{
int i = 6;
printf("&i=%p\n",&i);
f(&i);
return 0;
}
void f(int *p)
{
printf("p = %p\n",p);
}
&i = 0xbff17d70
p = 0xbff17d70
两者输出一样
访问那个地址上的变量
*是一个单目运算符,用来访问指针的值所表示的地址上的变量
可以做右值也可以做左值
int k = *p;
*p = k +1;
#include <stdio.h>
void f(int *p);
int main(void)
{
int i = 6;
printf("&i=%p\n",&i);
f(&i);
printf("i = %d\n",i);
return 0;
}
void f(int *p)
{
printf("p = %p\n",p);
printf("*p = %d\n",*p);
*p = 26;
}
输出
&i=0x100000
p = 0x100000
*p = 6
i = 26 //可以看到i的值改变了
传入地址
为什么
int i;scanf("%d",i);
编译没有错
因为i和&i都是int 类型,