int *p;
int i=3;
p=&i;
p是指针变量名。
int *是数据类型,表示是存放int 变量的地址的类型;
*表示对p所指向的地址取变量名,可以理解为取地址里面的内容。
*p和p;
p是地址,*p是以p的内容为地址的变量。
eg:p的内容就是i的地址,那么以p的内容为地址的变量不就是i嘛。
*p等同于i,i也等同于*p;但是他们两者之间互不影响。
指针和指针变量;
指针就是地址,地址就是指针;
指针就是内存单元的编号;
指针变量存放指针的变量,也就是存放地址的变量。
指针和指针地址不一样。
如何通过被调函数改变主调函数的值;
1.主调函数的实参为普通变量的地址;
2.形参得是指针;
3.int f(int *p){
*p=....;}
即可修改主调函数的值。
指针与一维数组(用指针遍历输出一位数组需要几个参数);
需要两个参数。一个是数组的首地址,还有就是数组的长度。
代码演示:
#include <stdio.h>
int f(int *p,int len){ //需要两个参数,一个是数组的首地址,还有就是数组的长度。
int i;
for(i=0;i<len;i++){
printf("%d",*(p+i)); //遍历输出数组
//*(p+i)==p[i]==*(a+i)==a[i]
}
}
int main()
{
int a[5]={1,2,3,4,5};
f(a,5);
return 0;
}
指针和数组下标的关系;
int *p;
a[3]={1,2,4};
p=a;
*p; //1
p[1]=*(p+1); //2
a[1]=*(a+1); //2
所以*(p+i)==p[i]==*(a+i)==a[i]