现在的位置: 首页 > 综合 > 正文

指针加减时需要注意的问题

2018年03月20日 ⁄ 综合 ⁄ 共 553字 ⁄ 字号 评论关闭

首先看下面这个程序

#include <stdio.h>

int main()
{
	int a[] = {1,2,3,4,5};
	int *p = (int*)(&a+1);
	printf("%d\n",*(p-1));
	return 0;
}


结果是5,分析如下:

指针加减时(如p++)结果主要是由p的类型决定的,在这个例子中a表示一个int[5]型数组,那么&a就表示一个指向数组的指针,&a++就相当于是a[6],结果自然可知了。

这里可以写成:

int a[5];
int (*ptr)[5] = &a;
//注意a等价于&a[0],只表示一个元素的地址。&a才表示数组的地址
//&a表示数组指针,a表示int型整数指针
//printf("%p %p\n",a,&a);//虽然这里打印的值一样,但表示的含义不一样
int *p = (int *)(ptr+1);

学习之后判断一下下面程序吧

#include <stdio.h>
#include <string.h>
int main()
{
	char* a[] = {"hello","the","world"};
	//printf("%d\n",sizeof(a[1]));//表示"hello","the","world"后面都隐藏了一个'\0'
	char **p = a;
	p++;
	printf("%s\n",*p);

	return 0;
}

抱歉!评论已关闭.