C语言——指针

1、什么是指针:

         指针就是地址,地址就是指针。(门牌号)


2、指针变量:存放变量地址的变量。


3、指针类型匹配:指针变量指向的是和它类型一致的变量的地址。


练习:

【1】封装一个函数实现两个数交换(函数传参用指针实现):01_pointer1.c

/*
 *         封装一个函数实现两个数交换(函数传参用指针实现):
 */
#include <stdio.h>

void swap(int* data1,int* data2)
   {
         int tmp;

	 tmp = *data1;
	 *data1 = *data2;
	 *data2 = tmp;
   }

int main()
  {
      int data1 = 10;
      int data2 = 5;

      printf("交换前: data1= %d  data2= %d\n",data1,data2);
      swap(&data1,&data2);
      printf("交换后:data1= %d  data2= %d\n",data1,data2);
	  return 0;
  }

【2】输入三个数a,b,c,要求不管怎么输入,在输出时,a,b,c就是由大到小的顺序输出,用函数封装实现。(传参使用指针): 02_pointer2.c

/*
 *        输入三个数a,b,c,要求不管怎么输入,在输出时,a,b,c就是由大到小的顺序输出,用函数封装实现。(传参使用指针)
 */

#include <stdio.h>

void number_comparisorison(int* p_data)
   {
       int i,j;
       int tmp = 0;

       for(i=0;i<3;i++)
         {
	   for(j=0;j<3-i-1;j++)
	     {
		if(*(p_data + j) < *(p_data + j+1))
		 {
		     tmp = *(p_data + j);
		     *(p_data + j) = *(p_data + j+1);
		     *(p_data + j+1) = tmp;   
		 }
	     }
	 }
   }



int main()
  {
       int arr[3];
       int i;

       for(i=0;i<3;i++)
         {
	      scanf("%d",&arr[i]);
	 }
       number_comparisorison(arr);
       for(i=0;i<3;i++)
         {
             printf("%d\t",arr[i]);
         }
       printf("\n");

	  return 0;
  }

4、定义一个指针变量指向数组

指针变量指向数组的首地址:a[0]。

示例:

int  arr[3];         //创建一个数组

int* p_data;      //创建一个指针

/******指针变量指向数组的方式*****/

【1】p_data  =  &arr[0];        //&arr[0]是数组的首元素地址

【2】p_data  =  arr;              //arr是数组名,数组名是数组的首地址,是一个指针 


5、通过指针偏移遍历数组:03_pointer3.c

/*
 *         指针偏移遍历数组
 */
#include <stdio.h>


int main()
  {
     int i;
     int arr[3] = {1,2,3};
     int* p_data = arr;

     /*指针变量数据的偏移*/
     for(i=0;i<3;i++)
       {
	      printf("%d\t",*(p_data+i));
       }
     printf("\n");


     /*指针变量地址的偏移*/
     for(i=0;i<3;i++)
       {
	      printf("%p\n",p_data+i);
       }
	 return 0;
  }

指针偏移遍历方法二:(此方法由注意事项)

p_data = arr;        //下面的指针每遍历一轮就需要重新指定数组的头

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

  {

         printf("%d",*(p_data++));

  }


 6、指针和数组名的关系(面试需要)

【1】指针当作数组名的下表法访问:04_pointer4.c

【2】数组名当指针用:   04_pointer4.c

/*
 *           指针和数组名的关系
 */

#include <stdio.h>

int main()
  {  
    int i;
    int arr[3] = {1,2,3};

    int* p_data = arr;

    /*****指针当作数组名的下表法访问*****/
    for(i=0;i<3;i++)
      {
         printf("%d\n",p_data[i]);         //此时p_data[1] 和 arr[1]等价
      }


    /**********数组名当指针用***********/
    for(i=0;i<3;i++)
      {
         printf("%d\n",*(arr+i));          //此时*(arr+1) 和 *(p_data+1)等价
      }


      return 0;
  }

【3】printf("%d",*(arr++));       //*(arr++)是不允许的        这里的arr是指针常量

     注:1】指针常量:指针常量指向的对象是可以修改的,但指针本身是不可以修改地址的。

            2】指针变量:是存储地址的变量。它可以存储对象或函数的地址。

【4】sizeof(指针)  和   sizeof(数组)

    1】printf("%d\n",sizeof(arr));            //占12个字节        数组中有3个元素   x    int类型 4Byte    =  12 Byte

    2】printf("%d\n",sizeof(p_data));     //占8个字节           在64位系统中所有的指针变量都是8个字节    


练习:  将数组中的n个元素按逆序输出(用函数实现功能)05_pointer5.c

/*
 *          练习:将数组中的n个元素按逆序输出(用函数实现功能)
 */

#include <stdio.h>


void Reverse_output(int* p_data,int len)
   {
      int i = 0;
      for(i=len-1;i>=0;i--)
        {
           printf("%d\t",*(p_data+i));
	} 
   }

int main()
  {
      int arr[5];
      int i;
      
      int len = sizeof(arr)/sizeof(arr[0]);     //计算数组的长度

      printf("请输入数组中的元素\n");
      for(i=0;i<len;i++)
        {
            scanf("%d",&arr[i]);
	}
      
      Reverse_output(arr,len);

      return 0;
  }

二维数组:二维数组的每一项都是一个数组。

7、二维数组的地址:06_pointer6.c

【1】一维数组中的每一项 " a[0] " 是数组的值

【2】二维数组中每一项 " a[0] " 是数组的地址

例:

int arr[2][3];

arr[1]:是一个数组名,数组中包含了3个元素。

 arr:是数组名,是整个二维数组的首地址

 arr[0][0] = arr[0]

/*
 *         二维数组的地址问题:
 */

#include <stdio.h>


int main()
{   
    int arr[2][3]; 

    printf("二维数组的地址:%p\n",arr);
    printf("元素arr[0]:%p\n",arr[0]);
    printf("元素arr[1]:%p\n",arr[1]);
    printf("元素arr[0][0]:%p\n",&arr[0][0]);
    printf("元素arr[0][1]:%p\n",&arr[0][1]);

      return 0;
}

【3】二位数组的首地址 :  int  arr[2][3];

(1)arr              :      二维数组的数组名

(2)arr[0]          :      二维数组的首元素

(3)&arr[0][0]   :       二维数组中首元素的首地址      

             arr[0]      等价于      &arr[0][0]

数组表示首地址:[1]数组名

                             [2]数组首元素的地址

【4】二维数组偏移问题:           把数组名当指针用

int arr[2][3];

(1)arr                         :数组名

(2)arr[0]                     :  数组首元素

    *(arr+1) 

  

(3)arr[0]+1                 :  arr[0]+1   :表示地址偏移是个指针

    *(arr+0)+1

(4)*(arr[0]+1)             :  表示arr[0][1] 的值

    *(*(arr+0)+1)


 8、数组指针 :数组指针就是指向数组的指针变量。它存储数组的地址,通过这个地址可以访问整个数组。

注: 

 :数组指针等同于二维数组名

 :定义一个指针指向一个数组 

【1】如何定义一个数组指针

类型     (*数组名)[大小];

int        (*arr)[10];             //二维数组中一项中有几个元素,[ ] 中就填写几。

例:

int  arr[2][3];              //定义一个二维数组

int  (*p_arr)[3];          //定义一个数组指针

【2】如何使用数组指针:数组指针每次偏移指向的都是一个数组  07_pointer7.c

/*
 *         如何定义一个数组指针并使用
 *         数组指针等同与数组名
 */

#include <stdio.h>


int main()
  {
	int i;
	int j;
	int arr[2][3] = {
		               {1,2,3},
			           {4,5,6}
	                };

	int (*p_arr)[3];

	p_arr = arr;

        /**********通过指针数组遍历二维数组********/
        for(i=0;i<2;i++)
	  {
	      for(j=0;j<3;j++)
	        {
		     printf("%d\t",*(*(p_arr+i)+j));
		}
	      printf("\n");      //打印完一项换行
	  }
	printf("done!\n");
  }

练习:输出二维数组任意行、列的数  (函数实现)     08_pointer8.c

/*
 *       数组指针:
 *       题目:输出二维数组任意行、列的数(函数实现)
*/

#include <stdio.h>

/***********输出任意行列的值***********/
void output_lineAndlie(int (*p_arr)[4],int line,int lie)
  {
        printf("第%d行第%d的值是:%d\n",line+1,lie+1,*(*(p_arr+line)+lie));    
  }


int main()
  {
     int line;     //行
     int lie;      //列
		   //
     int arr[3][4] = {
	                    {1,2,3,4},          //line 1
			            {5,6,7,8},          //line 2
			            {9,10,11,12}        //line 3
                     };

     printf("请输入行:");
     scanf("%d",&line);
     printf("请输入列:");
     scanf("%d",&lie);

     output_lineAndlie(arr,line,lie);
	return 0;
  }

9、函数指针

【1】函数指针的定义:如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(又称入口地址)

         称为这个函数的指针。 

注:函数名就是地址(函数的起始地址)

注:函数指针是指向函数的变量

注:可以根据程序运行的不同情况,调用不同的函数

【2】定义函数指针变量

   类型   (*变量名)(形参);

   int      (*func)(int data);

【2】通过函数指针调用函数  

       void  func(int data)                      //创建一个函数

          {

          }

       void (*p_func)(int data);             //定义函数指针变量

       p_func  =  func;                         //函数指针指向函数

       (*p_func)(data);                         //调用函数

 【2】附代码:通过函数指针调用函数     09_pointer9.c

/*
 *        通过函数指针调用函数
 */

#include <stdio.h>


/******创建一个函数*****/
void func(int data) 
   {
       printf("函数指针测试:");
       printf("data = %d\n",data);
   }

int main()
  {
      int data = 10;
      void (*p_func)(int data);       //创建一个函数指针
      p_func = func;                  //函数指针指向函数
      (*p_func)(data);                //调用函数
         return 0;
  }

练习 : 有两个整数a和b,由用户输入1,2或3。如输入1,程序就给出a和b中大者,输入2,就给出a和b中小者,输入3,则求出a与b之和。10_pointer10.c

/*
 *        练习 : 有两个整数a和b,由用户输入1,2或3。如输入1,程序就给出a和b中大者,输入2,就给出a和b中小者,输入3,则求出a与b之和。
 */
#include  <stdio.h>

/*****最大值*****/
int outBigNum(int num1,int num2)
  {
      if(num1 > num2)
       {
	    printf("最大值为num1,值为 %d\n",num1);
       }
      else
         {
	     printf("最大值为num2,值为 %d\n",num2);
	 }
	  return 0;
  }

/*****最小值*****/
int outSmallNum(int num1,int num2)
  {
	if(num1 < num2)
	 {
	      printf("最小值为num1,值为 %d\n",num1);
	 }
	else
	  {
		  printf("最小值为num2,值为 %d\n",num2);
	  }

	return 0;
  }

/******求和******/
int sumNum(int num1,int num2)
  {
        int sum = 0;
	sum = num1 + num2;
	printf("两数字之和为:%d\n",sum);
  }

int main()
  {
	  int InData;        //用户输出
	  int num1 = 10;
	  int num2 = 20;


	  int (*p_func)(int num1,int num2);     //创建一个函数指针

	  printf("提示:\n 输入1求最大值\n 输入2求最小值\n 输入3求和\n");
	  scanf("%d",&InData);
	  switch(InData)
	      {
		   case 1:{
			      p_func = outBigNum;       //函数指针指向函数(函数名是地址 )
			      (*p_func)(num1,num2);     //调用函数(函数指针)   
			  };break;
		 
		   case 2:{
			      p_func = outSmallNum;
			      (*p_func)(num1,num2);
			  };break;
		   case 3:{
			      p_func = sumNum;
			      (*p_func)(num1,num2);
			  };break;	
	      }
  }

10、指针数组:一个数组,若其元素均为指针类型数据 ,称为指针数组。

【1】定义一个指针数组

  类型   数组名[数组长度] ;

  int*  p[5];       //数组里面的每一项都是一个指针变量

特殊用法:int (*parr[5])(int  data);        //函数指针数组          //指针数组的每一项指向一个函数 

函数指针初始化 :int (8parr[3])(int  data) = {func1,func2,func3};

 【1】附代码:11_pointer11.c

/*
 *       指针数组示例
 *       指针数组就是一个,每一项都是指针的数组
 */

#include <stdio.h>
#include <stdlib.h>
int main()
  {
      int i;
      int data1 = 10;
      int data2 = 20;
      int data3 = 30;
      int data4 = 40;

      int* arr[4] = {&data1,&data2,&data3,&data4};       //指针数组 :数组中每一项都是指针。
      
      for(i=0;i<4;i++)
        {
            printf("%d\n",*arr[i]);        //输出指针数组的每一项
	}
      
      
	  return 0;
  }

11、指针函数 :返回值的类型是指针类型


12、二级指针: int** p;

【1】多级指针存放的是指针变量的地址

【2】定义二级指针:int**  p;

【3】二级指针示意:

                  int    ⬅     int*    ⬅       int** 

【4】二级指针用来存储一级指针的地址 

              数据类型**   指针变量名   =   & 一级指针变量名;

 【5】二级指针图示;

代码验证:12_pointer12.c

#include <stdio.h>
/*
     二级指针示意:
        int  ←  int*  ←  int**
*/
int  main()
        {
			int data = 100;
			int *pointer;
			int **pointer2;
			pointer  = &data;
			pointer2 = &pointer;
			puts("地址:");
		        printf("data的地址是:%p\n",&data);			
			printf("pointer的地址是:%p\n",&pointer);
			printf("pointer2的地址是:%p\n",pointer2);
			
			puts("值:");
			printf("*pointer的值是:%d\n",*pointer);
			printf("*pointer2的值是:%p\n",*pointer2);
			printf("**pointer2的值是:%d\n",**pointer2);
			puts("done!");
		    
                       return 0;
        }

【5】总结:

          在二级指针中,int**  p;

          p        是一个地址(二级指针首地址)

          *p      是一个地址

          **p     是一个具体的值


注: 一些平时不会注意的操作:

int *   p_data    ,    p_str;

p_data    是一个指针变量

p_str       是一个整型变量

附:本文中所有代码

 

RHCA ---RH442-4 这题考试中是没有的,但我做ex的判分脚本里做了,主要是lab环境swap只有512M的,这样后续改了某几个参数后会造成内存不够用导致异常.这里记得是双>,如果没自信的小伙伴可以在考试开始后第一时间把/etc/fstab先备份一个或者vi进入后手动敲一下。根据题意我们需要分2个768M的分区给swap。用free看swap大小是2.0Gi即可。留意红框中的内容即可,最后w保存退出。这个时候可以重启下机器。 阅读详情

相关推荐

保姆级教程:在Ubuntu 20.04上搞定PX4飞控与T265的视觉定位(附避坑指南)

本文提供在Ubuntu 20.04上配置PX4飞控与T265视觉定位系统的详细教程,涵盖驱动安装、ROS与MAVROS桥接、PX4参数调优及故障排查。通过实测验证的步骤和避坑指南,帮助开发者实现厘米级精度的视觉定位,特别适合室内无人机应用。

weixin_29038155的博客 248

【C语言】指针的指针在链表节点插入的注意事项

问题描述 提示:使用自定义函数进行尾插入链表节点 在函数中进行插入链表节点操作时,传入变量p(链表尾部节点)在sert函数中,修改p值且联动着改变operator中temp值的失效。 问题代码如下: struct List { int data; struct List* next; }; typedef struct List* list; void operator(list L1)//对链表L1操作的函数 { list temp = L1; int item; scanf("%d",

m0_49423911的博客 1634

探索Python融合地学:一文解决osgeo库安装失败问题

总结一下,要安装osgeo模块,关键在GDAL依赖库的安装,如果能够顺利安装GDAL依赖库,因其是osego的模块,因此osgeo的部分模块也能够得到自动安装,此时再运行代码,发现代码并不报错,能够正常运行了。第一步,我们要安装imagecodecs库,它支持多种常见的图像格式,当然也包含我们的目标tif格式,为方便后续的图像处理和安装osgeo模块,先安装此库。目前GDAL已经更新到了3.10版本,这里主要看你的Python版本是上面,小编用的是Python3.13,电脑是64位的,因此,我们选择。

Promising_GEO的博客 5461

死磕C语言指针

兜兜转转还是逃不过 C 语言,这该死的缘分。 先看一眼我的西野七濑 学习自:https://zhuanlan.zhihu.com/p/89121683 目录 1 指针 1.1 指针是乜嘢 1.2 指针的声明 1.3 运算符 1.4简单的小例子们: 例子1 例子2:指针在函数间通信 1.5 指针的运算 1.5.1 指针加减运算 1.5.2 间址运算 1.5.3 指...

闲狗的博客 2万+

u3d逆向学习之纯C内存读写与ImGui绘制(Android)

方法:需要在/proc/pid/maps文件查找模块名,一行行遍历所有内存,第一个参数为模块名,第二个参数为索引index(因为该模块会有多个,index为正序遍历第index个该模块),若找到了则使用。32位游戏的指针大小采用4字节,而64位游戏的指针大小采用8字节(这里需要注意),数据地址以16进制存储,使用unsigned long类型 ,该函数只有一个参数,数据地址,返回该地址的指针跳转地址。文件,比较其中的内容是否与传入的包名相同,如果相同,则返回该进程的PID。

zhoujunjie2004的博客 1687

避坑指南:ESP32S3驱动INMP441麦克风时的常见硬件冲突与解决方案

本文详细解析了ESP32S3驱动INMP441麦克风时常见的硬件冲突问题,包括GPIO资源冲突、电源噪声、I2S时钟同步等,并提供了实用的解决方案和优化策略。通过实测数据和代码示例,帮助开发者快速排查和解决音频设备开发中的疑难问题,提升系统稳定性和音频质量。

embedding5hiker的博客 942

c语言—指针详解

文章目录一、指针是什么二、指针和指针变量1.左值与右值2.两者的区别1.指针2.指针变量3.如何使用三、指针和指针类型 一、指针是什么 指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。 指针就是地址,地址就是指针。 使用指针的目的是提高使用效率 二、指

Welcome to my blog. 2万+

【华为OD】华为性格测试(综合测试)高分策略

1、性格测试非常重要,是一次否决制,18 个月有效期,所以态度一定要认真对待,不要随便乱选;2、做题原则:正向原则,积极乐观向上3、时间为 25-30 分钟,会频繁出现重复选项重复出现的题目注意一致性。

笑着的程序员的博客 3万+

指针c语言有什么作用,c语言中指针有什么用?

一、什么是指针C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量。前面已经提到内存其实就是一组有序字节组成的数组,数组中,每个字节大大...

weixin_42515781的博客 9108

【二 Deepseek+Coze案例】【 2.2 Coze + Deepseek 实现小红书爆款笔记:打造专属Agent智能体】

摘要 本文介绍了如何利用Coze平台和Deepseek模型构建自动化Agent智能体,用于生成和优化小红书爆款笔记。文章首先分析了爆款笔记的核心特征,包括精准定位、吸引标题、实用内容、精美排版和热门标签。随后提出Agent智能体的功能需求,涵盖热点追踪、内容生成与优化、数据分析及自动发布等模块。在技术实现上,详细阐述了从环境配置、数据采集到内容生成与优化的全流程,并提供了Python代码示例,展示如何调用Coze函数获取热点数据及竞品笔记。该方案通过智能化的内容创作与运营策略,帮助用户高效打造高曝光的小红书

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 2279

深度解析:企业AI效能度量框架的核心指标与落地路径,收藏级干货

资源成本:GPU利用率从31%提升到75%,云费用减少了50万元/年;工程效率:模型迭代周期从2周缩短到3天,部署成功率从70%提升到95%;模型性能:CTR从8%提升到12%,CVR从3%提升到4.5%;业务价值:增量收入达200万元/月,ROI达180%;伦理风险:推荐结果的差异影响比从0.7提升到0.9,用户投诉率下降了30%。现在,当CEO再问「AI项目值多少钱?

AI天才研究院 1807

c语言指针是什么

计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用 4 个字节,char 占用 1 个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。 下图是 4G 内存中每个字节的编号(以十六进制表示): 我们将内存中字节的编号称为地址(Address)或指针(Pointer)。地址从 0 开始依次增加,对于 32 位环境,程序能够使用的内存为 4GB,最小的地址为 0,最大的地址为 0XFFF

顺其自然~专栏 4821

扣子Coze触发器使用指南:实现工作流定时执行的完整教程

Coze平台触发器功能详解:定时触发器配置指南 摘要:Coze平台的触发器是实现自动化任务的核心组件,其中定时触发器能够按预设时间自动执行工作流。本指南介绍了定时触发器的配置方法,包括每日、每周、每月及Cron表达式等多种时间设置方式,以及如何关联工作流执行具体任务。文章还提供了健身提醒等实用案例,并涵盖了触发器调试、发布及常见问题解决方案。通过合理配置定时触发器,用户可以轻松实现各类自动化任务,如定时发送消息、数据采集等,大幅提升工作效率。

互联网架构师笔记 1922

【C语言】指针

C语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。

小明的博客 1518

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

c 语言输出指针的值,C 语言指针

C 语言指针在本教程中,您将学习指针。什么是指针,如何使用它们以及在示例的帮助下使用它们时可能遇到的常见错误。指针是 C和C ++ 编程的强大功能。在学习指针之前,让我们学习一下C语言编程中的地址。C 语言地址如果程序中有变量var,则&var将在内存中提供其地址。使用scanf()函数时,我们已多次使用地址。scanf("%d",&var);在此,用户输入的值存储在var变量的地址中。...

weixin_39587113的博客 8021

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C语言指针

c语言指针

2301_81990977的博客 1951

C语言指针总结

指针是一个变量,它存储另一个变量的内存地址。用通俗的话讲,指针是通往某个内存地址的“指路牌”。在C语言中,变量的本质是一个存储数据的内存单元,而指针则是指向这些内存单元的变量。通过指针,可以间接地访问和操作变量。指针是C语言的核心,它不仅能让代码更高效,还能更好地控制程序的运行。然而,指针也带来了复杂性和风险,如野指针、指针越界等问题。在使用指针时,要注意内存管理和边界检查。目前学习到的就是这些,后续还有其他内容再上来补充。如果有不足或者错误的地方还请看官们多多指出意见。溜。

weixin_61925653的博客 1691

c语言指针

33.若有定义int x[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};34.若有说明:char *language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};28.若有定义:int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;19.若有程序段:int a[2][3],(*p)[3];25.若有定义:int b[4][6],*p,*q[4];s=”china”;

2301_80956152的博客 1810

C语言——初始指针

文章目录C语言——初始指针指针是什么指针和指针类型野指针指针运算 C语言——初始指针 指针 本章重点 1.指针是什么 2.指针和指针类型 3.野指针 4.指针运算 5.指针和数组 6.二级指针 7.指针数组 指针是什么 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向变量单元。因此,将地址形象化的成为指针。意思是通过它能找到以他为地址的内存单元。 我们可以这样理解: 内存:

qq_59702185的博客 3647

c语言指针详解

指针是存储内存地址的变量,它可以访问指向的内存位置的值。指针运算(如解引用*p,取地址)是 C 语言的核心概念之一。指针与数组密切相关,数组名本身就是一个指向数组首元素的指针。动态内存分配常用指针来处理,使用malloc()calloc()等函数。指针的指针int**)和空指针NULL)是指针的高级应用和注意事项。指针在 C 语言中是非常强大的工具,但也需要小心使用,因为错误的指针操作可能导致难以发现的 bug。理解指针的工作方式是学习 C 语言的重要一环。

2401_87092358的博客 1645

【C语言进阶】C语言指针的高阶用法

相信大家当初学习C语言的时候,老师一定跟你说过这样的一句大实话:【指针,是C语言的灵魂】。

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 9296

c语言void*指针,C语言void指针

C语言void指针教程在 void 的意思就是 “无类型”,void 指针则为 “无类型指针”,void 指针可以指向void指针使用在 C 语言中在任何时候都可以用 void 类型的指针来代替其他类型的指针,void 指针可以指向任何数据类型的变量。如果要通过 void 指针去获取它所指向的变量值时候,需要先将 void 指针强制类型转换成和变量名类型相匹配的数据类型指针后再进行操作。任何类型的...

weixin_27743991的博客 2818

深入浅出C语言——指针

本文深入讲解了C语言指针的核心概念和应用。首先介绍了指针的本质——存储内存地址的变量,并解释了指针大小由系统位数决定(32位系统4字节,64位系统8字节)。接着详细分析了指针类型的两个关键作用:决定解引用访问的字节数和指针运算的步长。最后重点探讨了野指针问题,包括其成因(未初始化、越界访问、指向已释放空间)和规避方法(初始化、范围检查、及时置空)。指针作为C语言的灵魂特性,正确使用能提升程序效率,错误使用则可能导致严重问题,因此理解这些核心概念对掌握C语言至关重要。

weixin_55051736的博客 1688

C语言之指针

C语言指针核心概念摘要 指针是存储变量地址的变量,在32位/64位系统中分别占用4/8字节。指针类型决定了其解引用访问的字节数、算术运算步长和类型安全性。常见指针类型包括基本类型指针、结构体指针、函数指针和数组指针。野指针是C语言中的常见问题,指指向无效内存区域的指针。二级及多级指针通过间接引用实现对变量的多层访问。函数指针可用于回调函数,如qsort中的比较函数。数组指针与数组名存在微妙差异,数组名在某些情况下会退化为指针。指针的正确使用是C语言编程的核心技能,但也容易引发内存安全问题。

2502_91790308的博客 1457

C语言指针讲解

前言 指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。作为一个C语言初学者,我对指针也有了一定的了解,正好这几天在做一个C语言指针的知识点汇总,于是就有了这篇文章,向大家分享一些我的见解,与大家一起共勉。 为什么要学习指针 如果你想通过函数改变一个变量的值,就得用指针而不能用值传递,很多时候不同的函数存在很多不同的变量,当程序的数据量十分庞大的时候,我们就需要用指针来作为形参,通过传递地址,达到传递变量的目的。 指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量

WZRbeliever的博客 2284
上一篇: C语言常用的运算符(持续更新)
下一篇: C++命名空间自定义及使用(附完整程序)
没头脑@不高兴
博客等级 码龄7年 66粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值