首页 > 其他分享 >指针(二)

指针(二)

时间:2023-10-28 18:32:41浏览次数:23  
标签:str2 char 地址 数组 printf 指针

指针

今日份复习一维数组与指针、二维数组与指针、字符串与指针以及指针数组。

  • 一维数组与指针定义一维数组时,系统会在内存中为其分配一段存储空间,数组名就是数组在内存中的首地址。若再定义一个指针变量,并将数组的首地址传给指针变量,则该指针就指向了这个一维数组。
    表示将数组首地址赋给指针变量的两条语句:
    p=&a[0];
    q=b;
    其中,p+n与a+n都表示数组元素a[n]的地址,即&a[n]。*(p+n)和*(a+n)都表示数组元素a[n]。表示指针的移动可以使用“++”和”—“(两个减号)这两个运算符。
    如果在给数组元素赋值时使用了指针的自增运算,而且在输出数组元素时也使用指针变量,则需要加上以下语句:
    p=a;
    q=b;
    这两句的作用是将指针变量p和q重新指向数组a和数组b在内存中的起始位置。
    【例】一维数组指针的用法
    #include <stdio.h>
    void main()
    {
    int *p,*q,a[5],b[5],i;
    p=&a[0];
    q=b; //给指针赋值
    printf("请输入a的值:\n");
    for(i=0;i<5;i++)
    {
    scanf("%d",&a[i]);
    }
    printf("请输入b的值:\n");
    for(i=0;i<5;i++)
    {
    scanf("%d",&b[i]);
    }

    数组a的值为:\n");
    for(i=0;i<5;i++)
    {
    printf("%5d",*(p+i));
    }
    printf("\n");
    数组b的值为:\n");
    for(i=0;i<5;i++)
    {
    printf("%5d",*(q+i));
    }
    printf("\n");
    }
    结果为:
  • 二维数组与指针对于一个m行n列的二维数组,其元素地址的表示方法为:
  • a表示二维数组的首地址,也表示数组第1行的首地址。a+m表示第m+1行的首地址。
  • &a[m]+n表示数组第m+1行第n+1列的地址。
  • &a[0]表示数组第一行的首地址,&a[m]表示数组第m+1行的首地址。
  • &a[0][0]既可以表示数组第一行第一列的首地址也可以看作整个数组的首地址。
  • *(*(a+m)+n)和*(a[m]+n)含义相同,都表示数组第m+1行第n+1列元素。

也可以采用*(a+i)+j输入和输出二维数组。

【例】输出一个三行五列的矩阵

#include <stdio.h>

int main()

{

int a[3][5],i,j;

printf("请输入元素:\n");

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

{

for(j=0;j<5;j++)

{

scanf("%d",&a[i][j]);

}

}

printf("该三行五列的矩阵为:\n");

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

{

for(j=0;j<5;j++)

{

printf("%5d",*(a[i]+j));

}

printf("\n");

}

}

结果为:

指针(二)_字符串


  • 字符串与指针字符数组是一个一维数组,而字符串数组是以字符串作为数组元素的数组,可以看作一个二维数组。可以通过两种方式访问一个字符串:一是使用字符数组,二是使用字符指针。
    【例】实现字符串的复制功能
    #include <stdio.h>
    void _strcopy(char *str1,char *str2);
    int main()
    {
    char str1[]="你是正常人";
    char str2[]="";
    _strcopy(str1,str2);
    printf("复制之后的字符串为:%s\n",str2);
    return 0;
    }
    void _strcopy(char *str1,char *str2)
    {
    while (*str1!='0')
    {
    *str2=*str1;
    str1++;
    str2++;
    }
    *str2='0';
    }
    结果为:
  • 指针数组

指针数组,其元素均为指针类型数据。指针数组中的每一个元素都相当于一个指针变量。

指针数组使每个指针指向所需要的字符常量。这种方法需要在数组中保存字符指针,其占用空间远小于字符串数组占用空间。

【例】写出语文,数学,英语,化学,生物,物理的英文。

#include <stdio.h>

int main()

{

int i;

char *test[]={

"Chinese",

"math",

"English",

"chemistry",

"biology",

"physics"};

printf("答案是:\n");

for(i=0;i<6;i++)

printf("%s\n",test[i]);

return 0;

}

结果为:

指针(二)_数组_02


标签:str2,char,地址,数组,printf,指针
From: https://blog.51cto.com/u_15966010/8072609

相关文章

  • C++指针
    C++指针学习C++指针既简单又有意思。通过指针可以简化一些C++编程任务的执行,还有一些任务,例如动态内存分配,没有指针是无法执行的。因此学习指针是很有必要的。每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。实例......
  • 指针
    #include<iostream>usingnamespacestd;intmain(){inta=10;//声明指针pint*p;//讲指针p指向变量a的内存地址p=&a;cout<<"a的值="<<a<<endl;cout<<"a的内存地址="<<p<<endl;cout&......
  • 指针
    #include<iostream>usingnamespacestd;intmain(){ inta=10; int*p;//声明指针 p=&a;//将指针p指向变量a的内存地址 cout<<"a的值"<<a<<endl; cout<<"a的内存地址"<<p<<endl; *p=300; cout<<"a的值"......
  • 指针
    #include<iostream>usingnamespacestd;intmain(){inta=10;//声明指针pint*p;//将制作p指向变量a的内存地址p=&a;cout<<"a的值="<<a<<endl;cout<<"a的内存地址="<<p<<endl;cout......
  • 指针的基础认识及其结构
    #include<iostream>usingnamespacestd;intmain(intargc,char**argv){ inta=10; //声明指针p int*p; //将指针p指向变量a的内存地址 p=&a; cout<<"a的值="<<a<<endl; cout<<"a的内存地址="<<p<<endl; cout&l......
  • 指针
    includeusingnamespacestd;intmain(){inta=10;//声明指针pintp;//将指针p指向变量a的内存地址p=&a;cout<<"a的值="<<a<<endl;cout<<"a的内存地址="<<p<<endl;cout<<"指针p的指向内存地址的值"<<p<<end......
  • 指针
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ inta=10; int*p;//声明指针 p=&a;//将指针p指向变量a的内存地址 cout<<a<<endl; cout<<p<<endl;//a的内存地址 cout<<*p<<endl;//指针p指向内存地址的值,即a return0;}......
  • c++函数指针
    一、函数指针基础知识二、深入探讨函数指针三、auto四、使用typedef进行简化五、指针和const介绍安装使用参考介绍这是一个介绍。安装这是安装说明。使用这是使用说明。参考1.尽可能使用const一、函数指针基础知识完成函数指针需要的工作:获取函数的地址。声......
  • Toast自定义颜色抛出空指针异常
    首页沸点课程直播活动竞赛商城APP插件 创作者中心 会员登录 注册  实战Android升级目标版本到30过程中遇到的问题及解决办法开发者如是说2021-11-162,006阅读5分钟 专栏: Android开发文章合集 ......
  • 在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结
    在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结(p指向的不是第一个,也不是最后一个)A->B->C*p->B插入(在p结点之前插入q)解析:直接往p前插入q,由于没有头节点,不能遍历到p的位置,所以向p的后面插入q,在交换p、q的值q->next=p->next;p->next=q;swap(&p......