C语言指针数组

#include <stdio.h>
#include <math.h>
#include <string.h>

#define N_VALUES 5
int main(){
    int arr[N_VALUES] = { 0 };
    for(int* vp = &arr[N_VALUES];vp > &arr[0];){
        *--vp = 0;
    }
    
    /*标准上不允许
    标准规定:
充许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不充许
与指向第一个元素之前的那个内存位置的指针进行比较*/
    for(int vp = &arr[N_VALUES - 1];vp >= &arr[0];vp--){
        *vp = 0;
    }

    return 0;
}

指针和数组

  1. 数组名是什么:数组名是数组首元素地址

int main(){
    int arr[10] = { 0 };
    printf("%d\n",arr);
    printf("%d\n",&arr[0]);//输出结果一样
return 0;
}
  1. p + i产生的就是下标为i的元素的地址

int main()
int arr[10l={0};
int*p = arr;
int i=0;
for(i = 0; i < 10; i++){
    printf("%p <==> %pln",arr[i],p + i);//p + i产生的就是下标为i的元素的地址
}
return o;
}
  1. []是一个操作符2和arr是两个操作数

int main()
int arr[10] = ( 1,2,3,4,5,6,7,8,9,10);
int* p = arr;//数组名
printf("%d\n",arr[2]);
printf("%d\n", p[2]);//p[2] --> *(p+2)
//[]是一个操作符2和arr是两个操作数
//a+b <==> b+a
printf("%d\n",2[arr]);
printf("%d\n", arr[2]);
//arr[2] --> *(arr+2)-->*(2+arr)-->2[arr]
//arr[2] <==> *(arr+2) <==> *(p+2) <==> *(2+p) <==> *(2+arr) == 2[arr]
//2「arrl<==>*(2+arr)

二级指针

int main() {
int a = 10;
int*pa = &a;//pa是指针变量,一级指针
//ppa就是一个二级指针变量
int**ppa = &pa;//pa也是个变量,&pa取出pa在内存中起始地址
return O;
}
//*ppa == pa
//*pa == a
//**ppa == a

指针数组

引出:

int main() {
    int arr[10]; // Integer array
    char ch[5];  // Character array
    int *parr[5]; // Integer pointer array
    char *pch[5]; // Character pointer array
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值