首页 > 其他分享 >指针和地址变量

指针和地址变量

时间:2023-05-22 14:55:31浏览次数:33  
标签:10 变量 int ret 地址 指针

理解指针和地址变量的区别,以及如何正确进行函数传参

指针和地址变量的区别:

  1. 指针是一种变量,它存储的是另一个变量的地址(内存地址)。指针通过存储地址来间接操作某个变量。2. 地址变量是存储某个变量地址的普通变量。它直接存储地址这个数值。例如:
int a = 10; 
int *p = &a;  // p是指针,存储a的地址 
int addr = &a; // addr是地址变量,存储a的地址

这里p是指针,addr是地址变量,它们都存储了变量a的地址,用于操作a。区别在于:- 指针被定义为指针类型,用于通过间接操作指向的变量。
- 地址变量被定义为普通变量,用于直接操作地址这个数值。正确的函数传参:1. 当我们需要函数修改某个变量时,应传递该变量的地址作为参数。这是因为函数内部不能修改外部变量本身,只能修改其地址访问到的变量。例如:

void add1(int *n) {
    *n += 1;  // 通过地址修改n的值
}

int main() {
    int n = 0;
    add1(&n);  // 传地址
    printf("%d\n", n); // 1
}
  1. 当我们需要函数返回某个变量的值时,也应传递其地址。这是因为函数只能返回局部变量,无法直接返回外部变量。通过地址我们可以修改外部变量,实现“返回”其值的效果。例如:
void getValue(int *ret) {
    *ret = 10;  // 通过地址给ret赋值,实现"返回"值 
}

int main() {
    int ret;
    getValue(&ret);
    printf("%d\n", ret); // 10
}
  1. 如果我们不需要函数修改外部变量,只需要读取,则可以直接传变量本身的副本。这是因为函数会在内部创建一个副本,操作这个副本不会影响外部变量。例如:
void print(int n) {
    printf("%d\n", n); 
}

int main() {
    int n = 10;
    print(n);  // 直接传值,打印10 
    printf("%d\n", n); // n仍为10
} 

所以总结来说,正确的函数传参应遵循:- 如果需要修改或返回外部变量的值,传其地址
- 如果只需要读取外部变量,直接传值
- 明确指针与变量的区别,理解通过地址操作变量

标签:10,变量,int,ret,地址,指针
From: https://www.cnblogs.com/ChuenSan/p/17420606.html

相关文章

  • openwrt接入设备指定ip地址限速
    一、脚本限速使用自定义脚本对接入设备指定ip地址或地址段进行限速。#!/bin/sh#定义进出设备(IDEV内网接口,ODEV外网接口)IDEV="br-lan"ODEV="br-wan"#定义总的上下带宽UP="100mbit"DOWN="100mbit"#定义每个受限制的IP上下带宽#rate起始带宽(默认限制,单IP限......
  • 如何在linux中配置JDK环境变量
    在linux系统部署皕杰报表,因皕杰报表是一款纯java报表工具,运行时需要jre环境,所以要在服务器上配置三个jdk环境变量path、classpath、JAVA_HOME。那么为什么要配置jdk环境变量呢?因为java软件运行时要用到一些java命令,那么去哪里找这些命令呢?我们把命令放在一个目录下,然后通过给定的路......
  • iOS应用通过地址(URL)安装
    目标:iOS应用通过URL地址来安装准备:1.bundleidentifier2.应用图标3.下载地址  完整的下载地址是itms-services://?action=download-manifest&url=https://www.yourdomain.cn/download/2.1.0-10637/test.116d7.56d82df.20170122.test.domain.cn.ipa.plist其中,配置test.116d7.56d8......
  • Python 多进程之间共享变量
    转载:Python多进程之间共享变量-知乎(zhihu.com)Python多线程之间共享变量很简单,直接定义全局global变量即可。而多进程之间是相互独立的执行单元,这种方法就不可行了。不过Python标准库已经给我们提供了这样的能力,使用起来也很简单。但要分两种情况来看,一种是Process......
  • 13-1 udp和internet层协议 13-2IP地址组成和分类13-4 网卡配置文件和命令 13-5 网络理
    一、查看当前机器广播的地址和mac[root@centos8~]#arp-n查看当前机器的广播地址[root@centos8~]#tcpdump-ieth0arp-nn抓包[root@centos8~]#ipaa10.0.0.100/24deveth0添加多网卡命令[root@centos8~]#arping10.0.0.100查看IP有没有被占用二、查看相关包有......
  • 【重学C++】02 脱离指针陷阱:深入浅出 C++ 智能指针
    文章首发【重学C++】02脱离指针陷阱:深入浅出C++智能指针前言大家好,今天是【重学C++】系列的第二讲,我们来聊聊C++的智能指针。为什么需要智能指针在上一讲《01C++如何进行内存资源管理》中,提到了对于堆上的内存资源,需要我们手动分配和释放。管理这些资源是个技术活,一不小......
  • 智能指针学习
    c++的抛异常解决了返回错误码与函数层层返回的问题,但是异常往往可能有很多种,也有可能前面开辟了很多个空间,之后随着抛异常,这些空间都等着释放,这就太麻烦了,有可能会在写代码的时候疏忽忘记了释放这块空间造成内存泄漏,所以智能指针可以很好的处理这种情况,我们知道c++中的类......
  • C初级指针复习
    C初级指针复习:内存:内存中的每一个位置都由一个独一无二的地址标识每一个内存位置都包含一个值值和类型:不能简单地通过检查一个值的位来判断它的类型,为了判断值的类型(以及它的值),必须观察程序中这个值的使用方式,值的类型并非值本身所固有的一种特性,而是取决于它的使用方式NULL......
  • 局部变量元素加入成员变量QList后,局部变量出了作用域后,为什么QList仍然可以获取元素的
    问题问题:现有一个成员变量QList,在函数中定义了一个局部变量的对象,并将该局部变量加入到QList中。当函数运行结束,局部变量也就出了作用域,这时,由于局部变量只是一个普通对象,而不是指针,所以,应该被销毁。但是,我们在外面仍然可以通过QList对象来访问之前加入进来的数据,这是为什么?实验......
  • 关于Sqlserver动态语句传递表变量的用法
    一、定义[用户定义表类型]   --定义表类型   createtypeIntegerTableTypeastable(Idint)   go二、定义[表类型变量]   --表类型变量   declare@declareTableIntegerTableType   insertinto@declareTableselect1三、动态Sql语句   declare......