C语言 指针与一维数组,指针遍历一维数组的多种方法

指针与一维数组:

#include <stdio.h>

void test1()

{

    //利用指针来修改数组元素

    int a[2];

    int *p;

    p = &a[0]; //    p = a; 等效

    *p = 10;

    printf("%d\n",a[0]);

}

void test2()

{

    //遍历数组元素

    int a[3] = {1,2,3};

    for (int i=0; i<3; i++)

    {

        printf("a[%d]的值为%d\n",i,a[i]);

    }

}

void test3()

{

    //利用数组来遍历数组元素

    int a[3]={1,2,3};

    int *p;

    p = a;

    

    for (int i=0; i<3; i++)

    {

        //注意:我们这里的p+1是加的对应数据类型的一个单元

        //遍历完,p的值没有改变

        printf("a[%d]的值为%d\n",i,*(p+i));

    }

}

void test4()

{

    //利用数组来遍历数组元素

    int a[3]={1,2,3};

    int *p = a;

    for (int i=0; i<3; i++)

    {

        //注意:我们这里的p+1是加的对应数据类型的一个单元

        //遍历完,p的值改变了,指向了a[2] p=p+1

        printf("a[%d]的值为%d\n",i,*(p++));

    }

}

void test5()

{

    //利用数组来遍历数组元素

    int a[3]={1,2,3};

    int *p;

    p = a;

    for (int i=0; i<3; i++)

    {

        //注意:我们这里的p+1是加的对应数据类型的一个单元

        //a为数组的首地址,用a+i也行, 但是a++不行,因为a是常量,数组的首地址是不能修改的

        printf("a[%d]的值为%d\n",i,*(a+i));

    }

}

void test6()

{

    //利用数组来遍历数组元素

    int a[3]={1,2,3};

    int *p = a;

     for (int i=0; i<3; i++,p++)

    {

        //注意:我们这里的p+1是加的对应数据类型的一个单元

        printf("a[%d]的值为%d\n",i,*p);

    }

} 

void test7()

{

    //利用数组来遍历数组元素

    int a[3]={1,2,3};

    int *p = a;

    for (int i=0; p<a+3; i++,p++)

    {

        //注意:我们这里的p+1是加的对应数据类型的一个单元

        printf("a[%d]的值为%d\n",i,*p);

    }

}


int main(int argc, const char * argv[])

{  

  test1();

test2();

test3();

test4();

test5();

test6();

test7();

    return 0;

}

 

### C语言指针一维数组的关系 在C语言中,指针一维数组有着紧密的联系。理解两者之间的关系对于编写高效且安全的代码至关重要。 #### 指针作为数组元素访问工具 当定义一个一维数组时,可以通过指针遍历该数组中的每一个元素[^4]: ```c #include <stdio.h> int main() { int arr[] = {1, 2, 3, 4, 5}; int n = sizeof(arr) / sizeof(arr[0]); // 使用指针遍历数组 int *ptr; for (ptr = arr; ptr < arr + n; ++ptr) { printf("%d ", *ptr); } } ``` 这段代码展示了如何利用指针`ptr`指向数组的第一个元素,并通过自增操作逐个访问后续元素直到最后一个元素为止。 #### 数组名即是指向首地址的常量指针 值得注意的是,在大多数情况下,数组的名字实际上就是指向其第一个元素的一个隐式的常量指针。这意味着可以直接将数组名称当作指针使用而无需显式声明另一个指针变量: ```c printf("First element of array is %d\n", *arr); // 输出数组首个元素 ``` 这里直接解引用了数组名字`arr`,从而获取到了它所指向的那个整数类型的值。 #### 动态分配的一维数组及其指针表示法 除了静态创建固定大小的数组外,还可以借助动态内存管理函数如`malloc()`来构建可变长度的一维数组。此时返回的结果是一个指向新分配存储区起始位置的指针: ```c // 声明并初始化一个包含五个整型数值的空间 int *dynamicArray = (int *)malloc(5 * sizeof(int)); if (!dynamicArray) { fprintf(stderr, "Memory allocation failed.\n"); exit(EXIT_FAILURE); } // 初始化这些数据项... for (size_t i = 0; i < 5; ++i) dynamicArray[i] = i; free(dynamicArray); // 记得释放不再使用的资源 ``` 上述例子说明了怎样申请一段连续的内存块用于保存多个相同类型的数据对象;同时也强调了一旦完成对该部分内存的操作之后应当及时调用`free()`将其交还给操作系统的重要性。 #### 关联练习题目建议 针对专升本考试复习的需求,可以从以下几个方面入手加强理解和实践能力: - 掌握基本概念:了解什么是指针以及它们是如何工作的; - 学习不同形式的指针表达方式:掌握各种合法的形式去引用同一个实体的不同方法; - 练习实际应用案例:尝试解决一些涉及指针运算的实际问题,比如字符串处理、链表结构实现等; - 阅读高质量源码片段:分析优秀开源项目里的经典算法或模式,从中学习最佳编码习惯和技术细节。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值