Day29

在64位元系统指标是64/8 = 8bytes,而double也是8bytes若指标指向更小的型态如int就不合算了,相反的指向物件就很适合,但因为指标与传值不同,指标会修改到被指向的目标,如果想避免修改到目标可以使用常数指标(const *Ptr)。
与C不同C++除了传值与传址还有一个传参考(pass by reference),在传址中我们常见到一个符号&其目的是取出记忆体位置,另外参考只是一个别名(allies)而已,怎麽说呢?以下两个swap范例中我们会发现参考(reference)并没有自己的记忆体位置而是直接使用传进来的变数的记忆体位置,相反的指标版本的swap多出了2个记忆体位置。

  • SWAP 传参考
#include <stdio.h>
#include <stdlib.h>

void swap(int &x, int &y) {
    printf("x,y记忆体位置:%p,%p\n", &x, &y);
    int tmp = x;
    x = y;
    y = tmp;
}

int main(){
    
    int a = 3;
    int b = 5;

    printf("a:%d,b:%d\n", a, b);
    printf("a,b记忆体位置:%p,%p\n", &a, &b);
    swap(a, b);
    printf("a:%d,b:%d\n", a, b);
    return 1;
}
//result
a:3,b:5
a,b记忆体位置:0x7fffffffdb10, 0x7fffffffdb14
x,y记忆体位置:0x7fffffffdb10, 0x7fffffffdb14
a:5,b:3
  • SWAP 传指标
#include <stdio.h>
#include <stdlib.h>

void swap(int *x, int *y) {

    printf("x,y记忆体位置:%p,%p\n", &x, &y);
    int tmp = *x;
    *x = *y;
    *y = tmp;
}

int main(){
    
    int a = 3;
    int b = 5;

    printf("a:%d,b:%d\n", a, b);
    printf("a,b记忆体位置:%p,%p\n", &a, &b);
    swap(&a, &b);
    printf("a:%d,b:%d\n", a, b);

    return 1;
}
//result
a:3,b:5
a,b记忆体位置:0x7fffffffdb20, 0x7fffffffdb24
x,y记忆体位置:0x7fffffffdaf8, 0x7fffffffdaf0
a:5,b:3

<<:  DAY26 linebot结果展示-2

>>:  JavaScript学习日记 : Day29 - import & export

Android学习笔记29

平常在登入帐号密码的时候,下面常常会有验证码,接着就试着做做看吧 首先先把所有可能出现的字元打进来 ...

Day27-介绍 React Developer Tools

在 Day 25 介绍 React Profiler 的文章中有提到 React Developer...

Day 22:Spinner 下拉选单结合县市乡镇小工具

本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...

[DAY 14]cog架构用法(1/2)

目前discord bot已经有初步的功能了 之後写的功能一定会越来越多 决定使用cog的架构来写 ...

Vmware Workstation Pro 16许可证密钥

ZF3R0-FHED2-M80TY-8QYGC-NPKYF YF390-0HF8P-M81RQ-2D...