欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

10、C语言 —— 指针与一维数组(指针数组与数组指针)

程序员文章站 2022-07-07 11:37:10
...

1、使用指针修改数组元素

int array[2];
int *p;
p = array;
// 或 p = &a[0];

*p = 10;

printf("a[0]=%d\n", a[0]);    // 输出:a[0]=10


2、使用指针遍历数组

// a、平常我们是这样遍历数组的
int array[3] = {1, 2, 3};
for(int i=0; i<3; i++) {
    printf("a[%d]=%d\n", i, a[i]);
}

// b、用指针可以这样遍历数组
// 如果 p 是指向数组array的首元素array[0]
// 那么 p+1 则会根据数据类型 int 从而指向数组array的第二个元素array[1]
// 在16位编译器环境下,p+1代表增加2个字节
int *p = array;
for(int i=0; i<3; i++) {
    printf("a[%d]=%d\n", i, *(p+i));
}

// c、指针遍历2
// 此种方法相比于上一种方法不同的是:上一种方法指针p不变,而这种p每循环一次就改变一个
for(int i=0; i<3; i++) {
    printf("a[%d]=%d\n", i, *(p++));
}

// d、指针遍历3
// 数组跟指针有着密不可分的关系,array[i]也可以写成*(array+i)
for(int i=0; i<3; i++) {
    printf("a[%d]=%d\n", i, *(array+i));
}


3、指针,数组与函数参数

// 定义一个修改数组首元素的函数
void change(char c[]) {
    c[0] = 0;
}

void main() {
    char a[3];
    change(a);    // 传入数组地址
    printf("a[0]=%d\n", a[0]);    // 输入:a[0]=10
}

// 也可传入指针
void main() {
    char a[3];
    char *p = a;
    change(p);    // 传入地址
    printf("a[0]=%d\n", a[0]);    // 输入:a[0]=10
}

// 当然,change函数还可以改成这样
void change(char *c) {
    *c = 10;
    // 或c[0] = 10;
}

    10、C语言 —— 指针与一维数组(指针数组与数组指针)


4、指针数组与数组指针

    a、指针数组:int *p[n];

    • 因为优先级:() > [] > *

    • p首先是一个数组,再由 int * 说明这是一个整型指针数组

    • 即数组里的元素都存放着变量的地址

    b、数组指针(行指针):int (*p)[n];

    • p是一个指针,指向一个整型的一维数组

int a[3][4];
int (*p)[4];    //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

// 所以数组指针也称指向一维数组的指针,亦称行指针。




转载于:https://my.oschina.net/cobish/blog/337747