指针

指针与数组

指针减指针得到的数的绝对值是中间元素个数。

数组关系运算:(跟建议第一种写法)

#define N_VALUES 5
float values[N_VALUES];
float* vp
for(vp=&values[N_VALUES];vp>&values[0];)
{
    *--vp=0;
}

for(vp=&values[N_VALUES];vp>=&values[0];vp--)
{
    *vp=0;
}

当指针用于数组关系运算时,C语言标准规定,允许指向数组最后一个元素后面的那个内存位置的指针比较,但不允许与指向第一个元素之前的那个内存位置的指针比较。

#include<stdio.h>
int main(void)
{
    int arr[10]={0};
    printf("%p\n", arr);//地址.首元素地址
    printf("%p\n", &arr[0]");
    printf("%p\n", &arr"S);
    return 0;
}

除了以下两种情况数组名表示的不是首元素:

1、&数组名 数组名不是首元素的地址,表示整个数组。&数组名:取出的是整个数组的地址

2、sizeof(数组名) 数组名表示整个数组 sizeof(数组名)

二级指针

#include<stdio.h>
int main(void)
{
    int a=10;
    int*pa=&a;
    int**ppa=&pa;//ppa就是二级指针
    return 0;
}

int * * ppa:第二个 * 表示ppa是指针,而前面的int * 表示指针ppa指向的类型

多级指针

和二级指针一样,如:
int***pppa:三级指针
……

指针数组

例如整形数组用于存放整形、字符数组用于存放字符,指针数组是指存放指针的数组
上代码:

#include<stdio.h>
int main(void)
{
int a=10;
int b=20;
int c=30;
int arr[3]={a,b,c};//整形数组
int* arr2[3]={&a,&b,&c};//指针数组
for(int i=0;i<3;i++)
    {
    printf("%d ", *(arr2[i]))
    }
return 0;
}
上一篇:viper读取配置文件


下一篇:[vp]ARC058