`

C语言学习第九讲-指针

阅读更多

什么是指针?

指针同其它变量一样,不过他存储的是变量的地址.
多时候还可以看到多层的指针,就是这个指针所指的地方还是指针,而还是指针的地方指的还是指针,就这么一层一层的套,没有什么复杂的。
指针就是地址。
指针的类型?
从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。
从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。

为什么用?
可以更简单,提高效率

怎么用?
简单用法:
int a, *p;
p=&a; //基本类型

int arr[10], *p;
p=arr;//一维数组

int arr[4][5];
int *p;
p=arr[0]; //二维数组
for example:
int arr[3][3]={ {1,2,3},{4,5,6},{7,8,9}};
int *p=arr[0]; //数据类型相同,可以赋地址值
for(i=0;i<9;i++)
printf("%d", *(p+i)); // 逐个的输出数组元素

int arr[3][3]; 即 {arr[0], arr[1], arr[2] }
int (* p) [3] ; // 定义了一个指向二维数组的指针,这个二维数组中的一维数组有3个元素。
p=arr; // 把二维数组的地址赋给指针 p
如果二维字符数组初始化是 char arr[3][4]={"abc","def","ghi"};
所以可以如下写:
*(p+0) //是数驵 a[0] 的首地址 printf("%s", *p); 输出字符串 “"abc"
*(p+1) //数组a[1]的首地址 printf("%s", *(p+1)); 输出字符串 "def"
*(p+2) //数组 a[2]的首地址 printf("%s",*(p+2)); 输出字符串 "ghi"
如果要用这个二维数组的指针逐个的输出字符可以写为:
*(*(p+0)+0) //第一个字符 a
*(*(p+0)+1) //第二个字符 b
*(*(p+0)+2) //第三个字符 c
*(*(p+0)+3) //第四个字符 d
*(*(p+0)+4) //第五个字符 e

注意什么?
使用指针前一定要先初始化
不要把地址常量的赋给指针

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics