zoukankan      html  css  js  c++  java
  • 指针的本质

    变量回顾

    • 程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?

    思考

    下面的程序输出什么?为什么

    int i = 5;
    int* p = &i;
    
    printf("%d,%p
    ",i,p);
    *p = 10;
    printf("%d,%p
    ",i,p);
    

    *号的作用

    • 在指针声明时,*号表示所声明的变量为指针
    • 在指针使用时,*号表示取指针所指向的内存空间中的值

    例子1:指针使用分析

    #include<stdio.h>
    
    int main()
    {
    	int i = 0;
    	int* pI;
    	char* pC;
    	float* pF;
    	
    	pI = &i;
    	*pI = 10;
    	printf("%p,%p,%d
    ",pI,&i,i);
    	return 0;
    }
    

    传值调用和传址调用

    • 指针是变量,因此可以声明指针参数
    • 当一个函数体内部需要改变实参的值,则需要使用指针参数
    • 函数调用时实参数将复制到形参
    • 指针适用于复杂数据类型作为参数的函数中

    例子2:利用指针交换变量

    #include<stdio.h>
    int swap(int* a,int* b)
    {
    	int temp = *a;
    	*a = *b;
    	*b = *a;
    }
    
    int main()
    {
    	int a = 5;
    	int b = 4;
    	printf("a = %d,b = %d
    ",a,b);
    	swap(&a,&b);
    	printf("a = %d,b = %d
    ",a,b);
    	return 0;
    }
    

    常量与指针

    const int* p; // p可变,p指向的内容不可变
    int const* p; // p可变,p指向的内容不可变
    int* const p; // p不可变,p指向的内容可变
    const int* const p; // p和p指向的内容都不可变

    小结

    • 指针是C语言中一种特别的变量
    • 指针所保存的值是内存的地址
    • 可以通过指针修改内存中的任意地址内容
  • 相关阅读:
    由DataSet导出生成excel的几种方法
    linq日期查询
    上传文件
    C#获取文件的MD5值
    设置图层透明度
    highcharts中的x轴如何显示时分秒时间格式
    axios中文文档
    如何在 Highcharts 图中当所占百分比为 0 时不显示0%
    一个简易的选择小时(时分秒)的插件
    三分钟上手Highcharts简易甘特图
  • 原文地址:https://www.cnblogs.com/yanyun888/p/9213153.html
Copyright © 2011-2022 走看看