2020超长寒假自学c语言---指针

指针

指针变量与普通变量

指针=&变量
*指针=指针指定的变量的值

例1

先输出大数,再输出小数

#include <stdio.h>
int main()
{
    int a,b,*p,*q;
    int *r;
    printf("Please enter two integers:");
    scanf("%d %d",&a,&b);
    p=&a;
    q=&b;
    if (a<b)
    {
        r=p;
        p=q;
        q=r;
    }
    printf("max is %d,min is %d",*p,*q);
    return 0;
}

指针变量与一维数组

指针=&数组名[某数]
*指针=指针指定的变量的值
指针+i=&数组名[某数+i]

int *p,*q,a[3]={5,10,15};
    p=&a[0];
    q=&a[1];//p+1=10,p+2=15,q-1=5,q+1=15
&数组名[某数]=数组名+某数
数组名[某数]=*(数组名+某数)
例2

输入五个数,每个数乘以2后输出

#include <stdio.h>
int main()
{
    int i;
    int a[5],*p;
    p=&a[0];
    printf("Please enter five integers:");
    for (i=0;i<5;i++)
    {
        scanf("%d",p+i);
        *(p+i)=*(p+i)*2;
    }
    printf("The answer is:");
    for (i=0;i<5;i++)
        printf("%d ",*(p+i));
    return 0;
}

指针变量与一维数组相关函数

函数声明:数组名[]➡*p
函数解释:数组名[i]➡*(p+1)
函数使用:数组名➡q(使用前需先关联)

指针变量与二维数组

指针=&数组名[数a][数b]
*指针=指针指定的变量的值
指针+i=&(数组名[数a][数b]后面第i个元素)
&数组名[数a][数b]=数组名[数a]+数b
                =数组名[0]+a*列数+b
 数组名[数a][数b]=*(数组名[数a]+数b)
#include <stdio.h>
int main()
{
    int a[3][4]={1,2,3,4,5,6,6,4,3,2,1,2};
    int *p;
    for (p=&a[0][0];p<=&a[2][3];p++)
    {
        if ((p-&a[0][0])%4==0)
            printf("\n");//每四个数加一个换行
        printf("%d ",*p);
    }
    printf("\n");
    return 0;
}

指针变量与二维数组相关函数

函数声明:数组名[][某数]➡*p
函数解释:数组名[i][j]➡*(p+i*列数+j)
函数使用:数组名➡*数组名
函数声明:数组名[][某数]➡*p
函数解释:数组名[i][j]➡*(p+i*列数+j)
函数使用:数组名➡q(使用前需先关联)

指针变量指向二维数组的行变量

定义 (*p)[列数]
关联 p=二维数组名+某数n
==*(*(p+i)+i)=二维数组名[n+i][j]
例3

将a[3][3]的某行某列输出来

#include <stdio.h>
int main()
{
    int x,y;
    int  a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    int (*p)[3];
    p=a;
    while (scanf("%d %d",&x,&y)!=-1)
    printf("%d\n",*(*(p+x-1)+(y-1)));

    return 0;
}

用指向二维数组行变量的指针变量做形参

函数声明:数组名[][某数](*p)[某数]
函数解释:数组名[i][j]➡*(*(p+i)+j)

指针变量与字符串

与一维数组用法一样
指针=&数组名[某数]
*指针=指针指定的字串
指针+i=&数组名[某数+i]

指针变量与字符串相关函数

指针变量与函数

返回指针值的函数

指针与一维二维数组的数值关系

指针=&值

p=&a[0]
q=&a[1]
p=&a[0][0]
q=&a[0][1]

值=*指针

a[0]=*p
a[1]=*q
a[0][0]=*p
a[0][1]=*q
&a[i]=a+i
a[i]=*(a+i)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值