从头学习C语言之指针和数组

目录
  • 指针和数组:
    • 示例:
  • 总结

指针和数组:

数组名其实是数组第一个元素的地址。
%p用来打印地址,为十六进制
&:取址操作符

如果用一个指针指向数组,应该怎么做呢?

  • char *p;
  • p=a;//语句1
  • p=&a[0];//语句2

指针的运算:

  • 当指针指向数组元素的时候,我们可以对指针变量进行加减运算,这样做的意义相当于只想距离指针所在位置向前或向后第n个元素。
  • 对比标准的下标法访问数组元素,这种使用指针进行间接访问的方法叫做指针法。
  • 需要郑重强调的是:p+1并不是简单的将地址加1,二十只想数组的下一个元素。

linux命令:12s/a/b/g:把第十二行的所有a替换为b

示例:

例一:

从标准输入流读取字符需要取址操作符(scanf),并且用&来址

  #include<stdio.h>
   int main()
   {
       int a;
       int *p=&a;

       printf("请输入一个整数:");
      scanf("%d",&a);

      printf("a=%d\n",a);                              

      printf("请重新输入一个整数");
     scanf("%d",p);
      printf("a=%d\n",a);

    return 0;
  }

例二:

得出数组名是一个地址信息

   #include<stdio.h>
   int main()
   {
     char str[120];
     printf("请输入鱼C的域名:");
     scanf("%s",str);

     printf("鱼C工作室的域名是:%s\n",str);

    return 0;
  }

例三:

得出数组名其实是数组第一个元素的地址!

   #include<stdio.h>
  int main()
   {
     char str[120];
     printf("请输入鱼C的域名:");
     scanf("%s",str);

   //printf("鱼C工作室的域名是:%s\n",str);

  printf("str的地址是:%p\n",str);
    printf("str的地址是:%p\n",&str[0]);

   return 0;
 }

例四:

得出数组中的元素地址依次排列,元素空间相同按类型所占字节数排列

   #include<stdio.h>
   int main()
   {
     char a[]="fishc";
     int b[5]={1,2,3,4,5};
     float c[5]={1.1,2.2,3.3,4.4,5.5};
     double d[5]={1.1,2.2,3.3,4.4,5.5};                 

    printf("a[0]->%p,a[1]->%p,a[2]->%p\n",&a[0],&a[1],&a[2]);
   printf("b[0]->%p,b[1]->%p,b[2]->%p\n",&b[0],&b[1],&b[2]);
    printf("c[0]->%p,c[1]->%p,c[2]->%p\n",&c[0],&c[1],&c[2]);
   printf("d[0]->%p,d[1]->%p,d[2]->%p\n",&d[0],&d[1],&d[2]);

    return 0;
  }

例五:

得出数组中的元素地址依次排列,元素空间相同按类型所占字节数排列

   #include<stdio.h>
   int main()
   {
     char a[]="fishc";
    int b[5]={1,2,3,4,5};
     float c[5]={1.1,2.2,3.3,4.4,5.5};
     double d[5]={1.1,2.2,3.3,4.4,5.5};

    int *p=b;
    printf("*p=%d,*(p+1)=%d,*(p+2)=%d\n",*p,*(p+1),*(p+2));
    printf("*b=%d,*(b+1)=%d,*(b+2)=%d\n",*b,*(b+1),*(b+2));

    printf("a[0]->%p,a[1]->%p,a[2]->%p\n",&a[0],&a[1],&a[2]);
   printf("b[0]->%p,b[1]->%p,b[2]->%p\n",&b[0],&b[1],&b[2]);
    printf("c[0]->%p,c[1]->%p,c[2]->%p\n",&c[0],&c[1],&c[2]);
    printf("d[0]->%p,d[1]->%p,d[2]->%p\n",&d[0],&d[1],&d[2]);

  return 0;
  }

例六:指针变量直接定义并赋值字符串

     #include<stdio.h>
     #include<string.h>
     int main()
     {
       char *str="i love fishc.com!";
       int i,length;
      length=strlen(str);
       for(i=0;i<length;i++)
       {
        printf("%c",str[i]);
      }
      printf("\n");

    return 0;
    }

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C语言 指针数组进阶详解

    目录 指针与数组中的sizeof与strlen sizeof strlen 数组名 1.一维数组 整型数组 字符数组 指针数组 2.二维数组 指针笔试题 笔试题1 笔试题2 笔试题3 笔试题4 笔试题5 前言:指针与数组的知识往往让我们无法给自己定位,似乎是懂了,但真的碰上了又一言难尽.接下来有一些关于指针与数组的知识和例题讲解,来看看你对指针和数组到底有多了解吧! 指针与数组中的sizeof与strlen sizeof sizeof值关注占用空间的大小,单位是字节,不关注元素的类型,是一个操作

  • C语言的数组与指针你了解吗

    目录 前言 一.数组的定义 二.数组空间的初始化 1. char数组赋值 2.char数组硬件开发规范 二.数组与指针 总结 前言 自学笔记,没有历史知识铺垫(省略百度部分)C语言数组的概念及使用 一.数组的定义 char a[n]; 注意:数组与指针非常相似 二者的区别: 数组为常量,约定禁止二次赋值,即数组不应该出现在=左侧,如:a="HelloWorld";数组在声明时,会申请一段连续的内存空间,指针不会数组元素为变量,标记可以修改指向任意内存(实际上会copy右侧变量/常量到左

  • C语言中指针和数组试题详解分析

    目录 数组题: 程序一(一维数组): 字符数组 程序二(字符数组): 程序三(字符数组): 程序四(字符数组): 程序五(字符数组): 二维数组 程序六( 二维数组): 指针题 程序七( 指针): 程序八( 指针): 程序九( 指针): 程序十( 指针): 程序十( 图): 程序十一( 指针): 程序十二( 指针): 程序十三( 指针): 指针 和 数组 试题解析 小编,在这里想说一下,c语言的最后一节 C预处理,可能还需要一些时间,因为小编,昨天才下载了虚拟机 和 linux 系统,还没开始安

  • C语言运用函数指针数组实现计算器功能

    本文实例为大家分享了C语言运用函数指针数组制作计算器的具体代码,供大家参考,具体内容如下 先来回顾一下概念: 指针数组 -- 存放指针的数组 函数指针 -- 存放函数地址的指针 函数指针数组 -- 存放函数指针的数组 接下来说说这次要制作的计算器的功能: 1.add -- 加法 2.sub -- 减法 3.mul -- 乘法 4.div -- 除法 0.exit -- 退出 具体来通过代码讲解: (1)首先写一个菜单程序,在运行程序时首先打印一次菜单. void menu() { printf(

  • 详解C语言中的指针与数组的定义与使用

    指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 全局变量 内存映射 可以对内存的内容修改修改硬盘的内容 一般在数据库中经常使用 内存的分配与释放 c语言分配内存的方法 // malloc(需要分配的大小): 这里的分配的大小需要对齐的2的指数 void *mem = malloc(size); 释放内存 // 一般分配的内容都是在堆空间中的 //

  • C语言指针引用数组案例讲解

    前言:C语言中指针玩的是什么,是内存,要想学好指针的小伙伴们要先对数据在内存中是怎么玩的做一番了解~       当在程序中定义一个变量时,系统会根据其数据类型为其开辟内存空间,例如Visual C++为整型变量分配四个字节的空间,为单精度浮点型变量分配四个字节,为字符型变量分配一个字节,内存中每个字节都有自己独立且唯一的一个编号,这就是地址 ,如下图,系统为变量i分配了2000~2004的存储单元. _访问变量的方式_有如下图两种: 第一种直接访问方式,直接通过变量名访问,变量名与地址有一一对

  • c语言的指针数组详解

    指针如何指向数组,并读取数组中的元素: #include <stdio.h> int main() { int arr[3] = {1,2,3}; int *p; p = &arr[0];//此句也可以写成 p = arr: for(int i=0;i<3;i++) { printf("第%d个元素值为:%d\n",i,*(p+i)); /*应注意这里指针的定义类型:p+i并不是指p的地址+1, 而是偏移一个类型的字节数,这里的类型是int,所以偏移4个字节*

  • C语言指针数组案例详解

    指针与数组是 C 语言中很重要的两个概念,它们之间有着密切的关系,利用这种 关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之 间的联系及在编程中的应用. 1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组.如: char str[20], *ptr; ptr=str; ptr 被置为数组 str 的第一个元素的地址,因为数组名就是该数组的首地址, 也是数组第一个元素的地址.此时可以认为指针 ptr 就是数组 str(反之不成立), 这样原来对数

  • 从头学习C语言之指针和数组

    目录 指针和数组: 示例: 总结 指针和数组: 数组名其实是数组第一个元素的地址. %p用来打印地址,为十六进制 &:取址操作符 如果用一个指针指向数组,应该怎么做呢? char *p; p=a;//语句1 p=&a[0];//语句2 指针的运算: 当指针指向数组元素的时候,我们可以对指针变量进行加减运算,这样做的意义相当于只想距离指针所在位置向前或向后第n个元素. 对比标准的下标法访问数组元素,这种使用指针进行间接访问的方法叫做指针法. 需要郑重强调的是:p+1并不是简单的将地址加1,二

  • 从头学习C语言之二维数组

    目录 二维数组: 语法: 二维数组存放方式: 二维数组的访问: 二维数组的初始化: 示例: 总结 二维数组: 引入一个想法: 一个变量:相当于一个点. 一维数组(也就是数组):点汇聚成为一条直线. 二维数组:直线汇聚成一个平面. 三维数组:平面汇聚成立体图形. 语法: 类型 数组名[常量表达式][常量表达式] int a[6][6];//6*6,6行6列 char b[4][5];//4*5,4行5列 double c[6][3];//6*3,6行3列 二维数组存放方式: 二维数组的访问: 数组

  • 从头学习C语言之字符串处理函数

    目录 字符串处理函数: 存放和使用字符串: 获取字符串长度:strlen 示例: 拷贝字符串:strcpy和strncpy 示例: strncpy: 示例: 连接字符串:strcat和strncat 示例: 比较字符串:strcmp和ctrncmp strncmp和strcmp和区别: 示例: 总结 字符串处理函数: 存放和使用字符串: 字符串常量:“fishc”,“小甲鱼”,“鱼C工作室”字符数组: 获取字符串长度:strlen 用法:strlen(str) 注意: 这个函数获得的是长度(不带

  • 从头学习C语言之for语句和循环嵌套

    目录 for语句: 前言: 注意事项: 语句形式: 执行顺序: 示例: 循环嵌套: 语句形式: 流程图: 示例: 总结 for语句: 前言: 循环的基本结构离不开三个基本动作: 初始化计数器 循环条件 更新计数器 int count=0; while(count<10) { printf("fishc!\n); count=count+1; 注意事项: 1.C99允许再for语句的表达式1中定义变量(在for循环里定义的变量出了循环就不能用了), 如:for(int i=0;i<10

  • 从头学习C语言之if语句的使用

    目录 if语句: if语句的三种基本形式. 1 示例 2. 示例 3. 示例 课堂实践环节: 总结 if语句: 作用: 构成分支结构.(它根据给定的条件进行判断,以决定执行某个分支程序段.) if语句的三种基本形式. 1 .…//其他语句if(表达式){…//逻辑值为真所执行的语句.程序块}…//其他语句 流程图 示例 #include <stdio.h> int main() { int a,b,max; printf("输入两个数来比较大小:"); scanf(&quo

  • 从头学习C语言之switch语句和分支嵌套

    目录 switch 语句: 注意事项: 分支结构的嵌套: 注意事项: 语句形式: 流程图: 示例: 总结 switch 语句: 一个 switch 语句允许测试一个变量等于多个值时的情况.每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查. 注意事项: 在case每一行的语句或程序块后面要加上break;(否则程序将会把所有程序块从前到后运行一遍. default是可选的,如果上面的case中没有符合的才会选择default(属于备选情况),但是如果不加defau

  • C语言指针和数组深入探究使用方法

    目录 1.数组参数和指针参数 1.1 一维数组传参 1.2 一级指针传参 1.3 二维数组参数和二级指针参数 1.4 野指针的问题 2.函数指针 3.函数指针数组 4.指向函数数组的指针 5.回调函数 6.一道笔试题 1.数组参数和指针参数 1.1 一维数组传参 这里在前几期我们已经初略的见识过了,但是这里我们要提一个概念,数组给函数传参是会发生降维的,降维成什么呢?我们看代码: 这里通过打印形参的大小,发现是 4,其实也不奇怪,目前我们是 32 位操作环境,所以一个指针也就是 4 个字节,所以

  • C语言 指针与数组的详解及区别

    C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[10]; 指针数组简言之就是存放指针的数组: --数组并非指针&&指针并非数组 (1)定义一个外部变量: eg:int value=10; int *p=&value; 举例:当需要在一个函数中用这个变量时:externa int*p;而非extern int p[]; 分析:当用:e

随机推荐