上一篇介绍了指针是什么、指针的类型、和野指针,下面我将会接着上一篇的内容继续初始指针:
4、指针运算
1、指针加减整数
#include<stdio.h>
int main()
{
int arr[10] = { 0 },i;
int* p = arr;
for (i = 0; i < 10; i++)
{
*(p + i) = i;
}
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
由上面的代码可以看出指针可以加减整数,而且指针p是int*型,所以当p+1时则是向后访问4个字节(在当一篇文章中提到了),此处还应该注意一点就是:指针名是首字母的地址,所以对其进行解引用操作时,指针p找到了arr[0],对于数组名表示首元素地址后面我也会讲的
2、指针加减指针
让我们看一下下面的代码:
#include<stdio.h>
int main()
{
int arr[10]={0};
int* p=&arr[0];
int* j=&arr[9];
printf("%d",j-p);
return 0;
}
该代码运行的结果是9
由上面代码可以看出指针之间可以进行加减,而且也可以知道对于数组来所两个指针相减,所得到的结果是两个元素之间的个数
3、指针与指针之间的关系运算
#include<stdio.h>
int main()
{
int arr[5]={1,2,3,4,5},i;
int* p=arr;
for(p=&arr[5];p>&arr[0];)
{
*--p=0;
}
for(i=0;i<5;i++)
printf("%d ",arr[i]);
return 0;
}
该代码竟然可以 运行,大家是不是看出该代码存在两个问题呢?
相信大家对这个&arr[5]都起到了疑问,这里有个标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但不允许与指向第一个元素之前的那个内存位置的指针进行比较
当然也可以知道指针之间是可以进行比较的
4、指针和数组
关于指针和数组这里只需要知道:数组名表示第一个元素的地址
5、二级指针
所谓二级指针就是对一级指针再进行取地址操作
下面还是让我们看一段代码:
include<stdio.h>
int mian()
{
int a=;
int* pa=&a;
int** ppa=&pa;
return 0;
}
上面着一段代码是可以运行的,那我们看一下对改变ppa会不会改变a的值
根据这段代码可知对ppa解引用会改变a的值
5、指针数组
指针数组就是该数组中的元素为地址;
#include<stdio.h>
int main()
{
int a=10;
int b=20;
int c=30;
int i=0;
int* arr[3]={&a,&b,&c};
for(i=0;i<3;i++)
printf("%d\n",arr[i]);
return 0;
}
这就是初始指针的大体内内容,多敲敲代码增强理解