指针
-
就是保存地址的变量
int i;
int *p=&i;
指针变量
- 变量的值是内存的地址
- 普通的变量的值是实际的值
- 指针变量的值是具有实际值的变量的地址
作为参数的指针
-
void(int *p);
-
在被调用的时候得到了某个变量的地址
- int i=0;f(&i);
-
在函数里面可以通过这个指针访问外面的这个i;
#inlcude<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;
#inlcude<stdio.h>
void f(int *p);
void g(int k);
int main(void)
{
int i = 6;
printf("&i=%p\n",&i);
f(&i);
return 0;
}
void f(int *p)
{
printf(" p=%p\n",p);
printf("*p=%d\n", *p);
}
void g(int k)
{
printf("k=%d\n",k);
}
&i=0xbff17d70
p=0xbff17d70
*p=6
k=6;
#inlcude<stdio.h>
void f(int *p);
void g(int k);
int main(void)
{
int i = 6;
printf("&i=%p\n",&i);
f(&i);
return 0;
}
void f(int *p)
{
printf(" p=%p\n",p);
printf("*p=%d\n", *p);
*p = 26;
}
void g(int k)
{
printf("k=%d\n",k);
}
&i=0xbff17d70
p=0xbff17d70
*p=6
k=26
*左值之所以交左值
-
是因为出现在复制号左边的不是变量,而是值,是表达式计算的结果;
- a[0]=2;
- *p=3;
-
是特殊值,所以叫做左值
网友评论