C语言指针

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

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;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值