C语言学习(五)指针
int main(){ int a=99; int *p=&a; int **pp=&p; printf("%08x\n",a); //00000063 printf("%08x\n",&a); //bfbf5824 printf("%08x\n",p); //bfbf5824 printf("%08x\n",&p); //bfbf5828 printf("%08x\n",*p); //00000063 printf("%08x\n",pp); //bfbf5828 printf("%08x\n",&pp); //bfbf582c printf("%08x\n",*pp); //bfbf5824 printf("%08x\n",**pp); //00000063 return 0; }
分析:每个变量都是由:存储位置、变量值,而指针不同的是变量值存放的是指向变量的地址,所以使用*可以根据变量值里的地址获取变量值
声明指针:int *p;赋值:p=&a;即:p是存放a变量的地址,*p代表从p中的地址获取对应指向的值a;
而指针的指针声明:int **pp;赋值:pp=&p;即:pp是存放p指针的地址,*pp代表从pp中的地址获取对应指向即p,**pp取a值;
int i; 定义整型变量i int *p; p为指向整型数据的指针变量 int a[n]; 定义整型数组a,它有n个元素 int *p[n]; 定义指针数组p,它由n个指向整型数据的指针元素组成 int (*p)[n]; p为指向含n个元素的一维数组的指针变量 int f(); f为带回整型函数值的函数 int *p(); p为带回一个指针的函数,该指针指向整型数据 int (*p)(); p为指向函数的指针,该函数返回一个整型值 int **p; p是一个指针变量,它指向一个指向整型数据的指针变量
字符数组赋值
char str[14]; str=″I love China!″; 或 char *a;
a=″I love China!″;
或 char *a=″I love China!″;
char *a; a=″I love China!″;
注意赋给a的不是字符,而是字符串第一个元素的地址。
而对数组的初始化: char str[14]={″I love China!″};
不能等价于 char str[14]; str[ ]=″I love China!″;