C语言基础——指针数组(指向数组的指针)

数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element)。数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存。定义数组时,一定要给出数组名,数组名可以认为是一个指针,它指向数组的第 0 个元素。在C语言中,我们将第 0 个元素的地址称为数组的首地址。虽然可以认为是一个指针,但你在定义时千万别再数组变量名前面加 * ,否者这就不是一个常规的数组了,而是指针数组,里面的所有元素都是指针。

#include<stdio.h>

void main(){
    
    int arr[] = {1,2,3,4,5,6};
    这里的变量名arr里面存放的有该数组的第一个数据的地址也就是arr[0]的地址值
    所以可以认为arr就是该数组的指针
    int *p=arr;
    int *arr[]={p};
}

常规遍历数组和指针遍历数组:

#include<stdio.h>

void main(){
    int arr[]={6,4,3,5,8,1};
    int len = sizeof(arr);
    for(int i=0;i<len;i++){
        printf("%d\n",arr[i]);常规遍历方式
    }
    for(int i=0;i<len;i++){
         printf("%d\n",*(arr+i));使用arr指针遍历方式
    }
    int *p_arr=arr;
    for(int i=0;i<len;i++){
         printf("%d\n",*(p_arr+i));额外使用新指针来遍历数组
         printf("%d\n",*p_arr++);额外使用新指针来遍历数组
    }
}

当然,你还可以通过指针来直接修改数组的元素的值。但是你不可能通过像指针修改基本类型的变量的数据内容那样去修改数组变量arr的地址值。

#include<stdio.h>

void main(){
    int a = 10;
    int *p = &a;
    a = *p+1;
    printf("%d\n",a);结果是11,变量a中的数据已经被改变了
    
    int arr[1]={2};
    int *p_arr = arr;
    arr = *p_arr+1;这种操作是不允许的,因为arr指向的是一个数组而不是一个基本数据类型
}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值