数组中的指针

1065 数组中的指针

指针:

int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值 int **p
:二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针)
例如:
inti=10; //定义了一个整型变量
int *p=&i; //定义了一个指针指向这个变量
int **p1=&p; //定义了一个二级指针指向p指针
那么取出10的值方式为:
printf(“i=[%d]\n”,*p);
printf(“i=[%d]\n”,**p1);

二维数组可以理解为一维数组的一维数组 所以a[i]为地址

  • 即:
    *a = a[0] = a(地址);
    *a+i = (a+1) = a[i](第i行首地址);
    a[i]+j = a[i][j]地址
    (a[i]) = a[i][0]的值,(a[i]+j) = a[i][j]的值
    **a = a[0][0] 指针指向(元素)的值,
    (
    (a+i)+j) = a[i][j](元素的值)

例题:
设有如下数组定义: int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 计算下面各项的值(设数组a的首地址为2000,一个int类型数占四个字节)。
(1)a[2][1] (2)a[1] (3)a (4)a+1
(5)*a+1 (6)*(a+1) (7)a[2]+1 (8)*(a+1)+1
(9)*(*(a+2)+2)
编写一个程序直接输出你的答案,一行一个。

#include <iostream>
#include <string.h>
#include<cstdio>

int main()

{
    //数组从0开始
    /*二维数组可以理解为一维数组的一维数组 所以a[i]为地址
         即:*a = a[0] = a(地址);
         	*a+i = *(a+1) = a[i](第i行首地址);
         	*a[i]+j = a[i][j]地址
         	*(a[i]) = a[i][0]的值,*(a[i]+j) = a[i][j]的值
         	**a = a[0][0] 指针指向(元素)的值,*(*(a+i)+j) = a[i][j](元素的值)*/
    printf("19\n");//a[2][1]
    printf("2016\n");//a[1]:第一行首地址
    printf("2000\n");//数组首地址
    printf("2016\n");//存放指针地址的地址a +1,相当于a[1],即第一行首地址
    printf("2004\n");//存放指针地址的指针*a +1,相当于a[0][0]的地址+1,即a[0][1]的地址
    printf("2016\n");//a的首地址j+1后的指针指向的值(地址),即a[1][0]的地址
    printf("2036\n");//第二行首地址+1,即第二行第一个元素(a[2][1])地址
    printf("2020\n");//*(a+1):第1行第0个元素地址 再+1,即a[1][1]的地址
    printf("21\n");//a+2:第2行首地址,*(a+2):a[2][0]地址,*(a+2)+2:a[2][2]地址,*(*(a+2)+2):a[2][2]的值
    return 0;
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值