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语言中一种特别的变量
    • 指针所保存的值是内存的地址
    • 可以通过指针修改内存中的任意地址内容
  • 相关阅读:
    C# 操作Excel,使用EPPlus
    结构型设计模式之代理模式(Proxy)
    结构型设计模式之组合模式(Composite)
    结构型设计模式之桥接模式(Bridge)
    C#操作windows事件日志项
    C#操作XML序列化与反序列化
    日志组件Log4Net
    UI Automation 简介
    Selenium
    Selenium
  • 原文地址:https://www.cnblogs.com/yanyun888/p/9213153.html
Copyright © 2011-2022 走看看