C语言指针

来源:互联网 发布:淘宝如何设置花呗支付 编辑:程序博客网 时间:2024/06/15 19:56

此处分析四种类型的指针:

1,指向单个地址的指针

 int a = 12;

int *b = &a;//b中是a的地址,所以b指向a

int **c = &b;//c中是b的地址,b又指向a,所以c指向a

----------------------------------------------------------------------------------------------------------

2,指向数组的指针

int array[10];

int *ap = array;//ap是个地址,而且ap这中的值与array中的值相同

int *ai = array+2;

ap[3];

ai[-1];

-----------------------------------------------------------------------------------------------------------

3,指向二维数组的指针

(1)

int matrix[3][10];

int *p = &matrix[0][0];

int *p = matrix[0];

int **p = matrix;

以上是逐个访问而不是逐行在数组中移动;

增加这个指针的值使他指向下一个整形元素。

(2)

int (*p)[10] = matrix;//注意:有括号,不推荐

P是一个指向拥有10个整形数组的指针,p指向数组的第一行,p+1指向数组的第二行,以此类推。

-----------------------------------------------------------------------------------------------------------

4,指针数组

int *api[10];

首先 [] 的优先级大于 * ,先取下标,说明api是个数组;

其次对api[i]间接引用,说明api中存的是地址

综上推出api是个指针数组。

注意跟int (*p)[10]不一样。

指针数组的一个小例子:

功能:遍历整个关键字列表,查找是否存在与参数字符串相同的匹配。当他找到一个匹配时,函数就返回这个匹配在列表中的偏移量。

#include "stdio.h"#include "string.h"//*keyword[]指向整形的指针,keyword是一维数组char const *keyword[] = {"do","for","if","register","return","switch","while"};#define N_KEYWORD (sizeof(keyword))/(sizeof(keyword[0]))int lookup_keyword(char const * desired_word,char const *keyword_table[],int const size){char const **kwp;for(kwp = keyword_table;kwp<keyword_table+size;kwp++){if(strcmp(desired_word,*kwp) == 0){printf("yes\n");return kwp - keyword_table;}}return -1;}int main(){int num = 0;char a[] = "if";num = lookup_keyword(a,keyword,N_KEYWORD);printf("N_KEYWORD = %d\n",N_KEYWORD);printf("%d",num);getchar();return 0;}


0 0