首页 > 其他分享 >C语言中数组和指针

C语言中数组和指针

时间:2023-06-21 20:05:04浏览次数:44  
标签:函数 指向 int C语言 数组 ptr 指针

(文章目录)


前言

本文将给大家带来C语言中非常重要的两个知识点,指针和数组。

一、指针的概念

指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,指针既然都用来存放地址了那就说明指针也是一个变量。

二、指针的大小

指针在不同位数的编译器环境下的大小是不一样的,在x64中指针的大小是8个字节,在x86中指针的大小是4个字节的。

#include <stdio.h>

int main(void)
{
    int a = 1;
    int* p = &a;
    printf("%d\n", sizeof(p));

    return 0;
}

上面的程序在x64和x86中打印出的结果是不相同的。

三、指针的用法

1.指针指向变量

#include <stdio.h>

int main(void)
{
    int a = 1;
    int* p = &a;
    printf("%p,%p\n", &a, p);
    printf("%d\n", a);
    *p = 5;
    printf("%d\n", a);

    return 0;
}

可以通过指针修改变量的值,加上一个*代表取指针变量指向地址的数据。指针变量里面保存的值是指针变量指向空间的地址。

2.指针指向数组

指针可以指向数组,这意味着指针可以使用数组名来获取数组中的元素,也可以使用指针算术运算访问数组中的元素。因为数组名代表数组的第一个元素的地址,所以可以使用数组名来初始化指针。 举例:

#include <stdio.h>
int main() 
{
   int arr[] = {10, 20, 30, 40, 50};
   int *ptr;
   ptr = arr; // 指针指向数组的第一个元素
   for(int i = 0; i < 5; i++) 
   {
      printf("arr[%!d(MISSING)] = %!d(MISSING)\n", i, *ptr);
      ptr++; // 指针向后移动一个位置
   }
   return 0;
}

我们声明了一个整型数组arr,包含5个元素。然后,我们声明了一个指向整型数据的指针ptr。我们将指针ptr初始化为数组arr的第一个元素的地址。在for循环中,我们使用指针ptr来打印数组中的所有元素。通过ptr++,指针向后移动一个位置,以便在下一次迭代中访问下一个元素。

3.指针指向函数

在C语言中,指针可以指向函数,这被称为函数指针。函数指针可以用来动态调用不同的函数,也可以用来实现回调函数等高级编程技巧。

#include <stdio.h>

void hello() 
{
   printf("Hello, world!\n");
}

void goodbye() 
{
   printf("Goodbye!\n");
}

int main() 
{
   void (*ptr)(); // 声明函数指针
   ptr = hello; // 指针指向 hello() 函数
   ptr(); // 调用 hello() 函数
   ptr = goodbye; // 指针指向 goodbye() 函数
   ptr(); // 调用 goodbye() 函数
   return 0;
}

我们声明了两个函数hello()和goodbye(),它们分别打印“Hello, world!”和“Goodbye!”。然后,我们声明了一个函数指针ptr,它可以指向任何没有参数和返回值的函数。我们将指针ptr初始化为hello()函数的地址,然后通过ptr()调用hello()函数。接下来,我们将指针ptr重新指向goodbye()函数,并再次通过ptr()调用goodbye()函数。函数指针提供了更大的灵活性,可以在程序运行时动态地选择要调用的函数。

总结

我为大家总结了这些指针的要点:

1.指针是一个变量,它存储了一个内存地址。 2.指针可以用来访问存储在内存中的数据。 3.指针可以通过运算符(如*和&)进行操作,比如取地址、解引用等。 4.指针可以指向不同的数据类型,但必须与所指向的数据类型相匹配。 5.指针可以用来传递参数和返回值。 6.指针可以用来动态分配内存,以及在程序中进行内存管理。 7.指针可以用来实现复杂的数据结构,如链表、树等。 8.指针也可以用来实现一些高级的编程技巧,如函数指针、回调函数等。 总之,指针是C语言中不可或缺的重要概念,理解指针的使用和运作原理对于深入掌握C语言编程非常重要。

这篇文章先简单的介绍一下指针的基础用法,指针在工程开发中还有很多高级用法,后面的文章继续给大家讲解。

标签:函数,指向,int,C语言,数组,ptr,指针
From: https://blog.51cto.com/u_16153875/6531110

相关文章

  • 自学C语言2023_6_21
    变量的作用域和生命周期: 作用域:变量的生效范围就是作用域局部变量的作用域:变量所在的局部范围(大括号内) 全局变量的作用域:整个工程其他.c文件的变量:需要使用extern声明一下变量  生命周期:变量的创建和销毁之间的时间段局部变量:进入局部范围生命开始,出局部范围生命......
  • 102 数组转字符串;反转字符串
    publicclassStr3{publicstaticvoidmain(String[]args){//将数组转【字,符,串】//数组int[]arrNum={1,2,3,4,5};Stringss=getStr(arrNum);System.out.println(ss);}//获得一个拼接后的字符串publics......
  • 20230303 2.0. 数组和链表
    数组数组是最基本的构造类型,它是一组相同类型数据的有序集合。数组中的元素在内存中连续存放,用数组名和下标可以唯一地确定数组元素。链表链表是一种重要的基础数据结构,也是实现复杂数据结构的重要手段。它不按照线性的顺序存储数据,而是由若干个同一结构类型的“结点”依次......
  • [Leetcode] 0724. 寻找数组的中心下标
    724.寻找数组的中心下标点击上方,跳转至leetcode题目描述给你一个整数数组 nums,请计算数组的中心下标。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为0,因为在下标的左侧不存在元素。......
  • 精通c语言中的指针-数组
    一维数组:intara[3]={1,2,3};printf("%d\n",ara):printf("%d\n",&ara):打印之后,发现ara和&ara两个值是一样的,为什么?按照我们学习的理解,&ara是取ara的地址,一个是地址,一个是值,不应该一样,那为什么打印出来会是一样的? 从汇编的角度可以解释这个问题:printf("%d\n",ara):......
  • 各种语言中对指针的叫法
    如果没有指针,就无法构造正统的数据结构,因此,比较成熟的、正统的编程语言,必定会存在指针3。3以前,FORTRAN、COBOL和BASIC中都没有指针,但是在fortran90、VisualBasic等升级版中,正式引入了指针功能。咦?我怎么听说Java就没有指针呢……我可以负责任地告诉你,这是个谣言。......
  • C语言与C++不得不说的那点事
    说到C语言,就不得不说它的继承者——C++语言。众所周知,C++语言是在C语言的基础上,添加了面向对象、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“C/C++”。虽然因为天然的血缘关系,导致两......
  • Const 关键字 与指针
    Const关键字与指针发表于2007年04月29日由不及格的程序员-八神星期一天气:晴 使用指针会涉及到两个对象一个是指针本身,另一个是它指向的对象.将指针声明为const就使对象为常量而不是指针为常量;例如:constchar*p="asdf";//指向常量的指针p[2]=‘d’; /......
  • js 数组 map方法
    一、map的第一种使用场景需求:我们想得到对象数组中指定的两组或多组key和value值。如下图:下面是一段JSON数据结构{"code":0,"msg":null,"data":[{"processDetailId":1381753495314433,"processId":138175349......
  • 精通c语言中的指针(精通c指针1)
    之前学c语言的时候,指针这一章学的半吊子,似是而非,最近经过学习,对指针有个更加深刻的理解。如果之前学过c指针,并且可以使用指针随心所欲操作内存中的任何数据,那么说明指针学好了,否则就是半吊子。如果之前学过指针,那最好忘记之前学过的所有概念,把指针当做一种新的类型来学习。这种......