关于指针和数值交换

前天学习了关于内存的原理,理解了一下堆栈。今天学习指针,思路比刚开始学的时候更加清晰了一些。

首先在函数参数传递过程中,如果是基本变量,如int型,传递的参数是参数的拷贝

void change(int x,int y){
    int temp;
    temp = x;
    x = y;
    y = temp;
}

这个函数实际上对主函数里的参数没有做任何的修改

为什么呢?下面用一张图解释一下

这个图真是有够大的

#include<stdio.h>

void change(int *x,int *y){
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

void main(){
    int x,y;
    x=5;
    y=6;
    //int *p1;
//    int *p2;
//    p1 = &x;
//    p2 = &y;
    change(&x,&y);
    printf("%d %d",x,y);
}

学习了微机,认识了一下内存,数据结构,以前模糊的概念都清晰了起来。

虽然是很基本的内容。

时间: 2024-12-20 10:19:34

关于指针和数值交换的相关文章

数值交换

public class 数值交换{ public static void main(String[] args){ int A=1; int B=2; int t=A;//中间值 A=B; B=t; System.out.print("A的值是:"+A+"\nB的值是:"+B); } } 数值交换,布布扣,bubuko.com

用C语言实现数值交换

我的第一个博客,我想先从最简单的开始吧.我是一个学生,今天给大家带来的是用C语言实现两个数的数值交换,如果大家有什么问题或建议,可以给我留言.我们一起讨论一起学习,谢谢! 关于数值交换问题,我的解决方案有三种: (一)设置第三个变量帮助进行数值交换. 思路:就像两个水杯中都盛满了液体,A杯中放的是红色液体,B杯中放的蓝色液体,你需要一个空杯子C,将A中的液体倒进C中,这样A杯子空了,才能将B杯子中的液体倒入A中,最后将C杯子中的液体倒入B杯子中.最后A杯子中的液体是蓝色(来自B杯子),B杯子中液

基础练习 - 数值交换

题目 1 声明两个变量:int n1 = 10,n2= 20,要求将两个变量叫唤,最后输出n1为20,n2为10.                      (扩展*: 不使用第三个变量如何交换) 解决方案 基本方法 private static void BasicMethod() { int n1 = 10; int n2 = 20; Console.WriteLine("n1={0}", n1); Console.WriteLine("n2={0}", n2)

Java 俩个数值交换

突然想到java是按值传递参数的,那么常常在c c++(允许按值和引用传递参数)中看到的数值交换,怎么可以在java中实现呢? 自己想了个小demo测试下,可以. public class Test { public int a; public int b; public void swap(int a,int b) { this.a=b; this.b=a; } public static void main(String[] args) { int a=2,b=3; System.out.p

【Python】变量数值交换、判断数组是否含有某个元素

本来,这两个问题都属于的编程入门简单得不能再简单的问题,根本就不值得写篇记录来记录的. 一.变量数值交换 先说变量数值交换,从C语言开始,我们就知道要先设置一个临时变量,再把某元素的值覆盖此临时变量,避免临时覆盖等,如果不设置临时变量,还有位运算的交换形式 然而Python中根本就不用这么复杂,如果要交换变量e1,e2彼此的值,就下面一行代码就足矣: e1,e2=e2,e1; 比如,如下的程序: e1=2; e2=3; print "e1:"+str(e1)+",e2:&qu

C零基础视频-34-通过指针实现函数交换两个变量的值

目录 回顾:函数的值传递 使用指针交换两个变量的值 回顾:函数的值传递 因为函数的调用过程中,实参到形参是值传递,因此,改变形参,是无法影响到实参的: #include <stdio.h> void FakeSwap(int nArg1, int nArg2) { int nTemp = nArg1; nArg1 = nArg2; nArg2 = nTemp; } int main(int argc, char* argv[]) { int nValue1 = 100; int nValue2

JavaSE7基础 使用位运算异或 进行两个变量的数值交换

jdk版本  :jdk-7u72-windows-i586系统     :Windows7编辑器   :Notepad++ v7.4.2注意事项 :博文内容仅供参考,不可用于其他用途. 代码 class Demo{ public static void main(String[] args){ int a=10; int b=20; //一般来讲,把这两个数交换可以申请一个中间变量temp //在高深一点的话,可以建立方程组 //然而,在视频教程中老师 却是这样做的... a = a ^ b;

两数值交换

大致分为3种方式实现: 1.通过中间变量方式实现. C = A; A = B; B = C; 2.通过加法方式. 实现原理:比如A有5块钱,B有10快钱.此时要A,B交换,此时就先把钱给一个人,然后减去另一个人的金额. 比如先把钱给A(此时A中的钱为总金额),然后交换后B的钱就是总金额减去之前B给A的钱. A = A+B; B = A-B; A = A-B; 此方法的缺点:会造成内存溢出的情况. 3.通过位运算,异或方式(相同为0,不同为1). 首先需要了解异或运算的一些性质 a.任意一个变量X

c语言中通过指针将数值赋值到制定内存地址

1.一种直观的方法 假设现在需要往内存0x12ff7c地址上存入一个整型数0x100.我们怎么才能做到呢? 我们知道可以通过一个指针向其指向的内存地址写入数据,那么这里的内存地址0x12ff7c其本质不就是一个指针嘛.所以我们可以用下面的方法: int *p = (int *)0x12ff7c; *p = 0x100; 需要注意的是将地址0x12ff7c赋值给指针变量p的时候必须强制转换. 1.1 为什么在此处,我们敢往0x12ff7c这个地址赋值呢? 至于这里为什么选择内存地址0x12ff7c