关于地址,指针之间赋值练习

typedef struct{
    int a;
    int b;
}M;

int main(int argc, char *argv[])
{
    M c;
    printf("%d\n",&c);
    M b;
    printf("%d\n",&b);//b的地址
    b = c;//b的值等于c
    printf("%d\n",&b);//b的地址未变

    M* ca = (M*)malloc(sizeof(M));
    ca->a = 3;
    M* ce = (M*)malloc(sizeof(M));
    printf("%d %d  ca ce\n",&ca,&ce);
    ce = ca;//ce的 值(指针地址) 等于ca
    printf("%d %d \n",&ce,ce->a);//ce的地址未变 3

   return 0;
}
时间: 2024-11-15 20:21:48

关于地址,指针之间赋值练习的相关文章

C-函数,数组指针,指针之间的运算

goto原理: 当执行到goto语句的时候, cpu就会跳转到当前函数指定的标志的地方 使用goto也可以实现循环操作 但是在使用的时候,要注意不要造成死循环 一般情况下不建议经常使用goto语句,因为不安全——容易造成死循环 除非在特别确定不会有死循环的情况下,才可以用goto goto不仅可以往前跳,还可以往后跳 使用goto时, 标签代码行的下一行代码不能是声明变量,如果非要写在这个地方,那就在声明变量行前面加一句无意义的代码 标示符:  通俗来讲就是程序员可以自己命名的东西: 变量名,g

结构体指针之间和结构体之间的强制类型转换那些事

结构体指针的强制类型转换在链表的使用中是非常有用的一种方式: (比如我们有一条链表(我们知道每一个链表的节点都是一种结构体),而链表中的每一个节点又是某一个结构体中的成员, 我们就可以通过查询链表的节点,通过将节点强制转换为某个结构体,然后我们就可以方便的使用某个结构体的其他成员了). 那么结构体之间的强制转换又是基于什么的原理实现的呢?需要明白下面几点: 1.结构体声明如何内存的分布,  2.结构体指针声明结构体的首地址,  3.结构体成员声明该成员在结构体中的偏移地址 举个例子: typed

地址/指针和字符串

今天做作业时,发现下列一个问题. 首页是这个自编的strncpy函数: #include "ctype.h" #include "stdlib.h" #include "string.h" #include "windows.h" int main() { char *strata(char s1[],char s2[],int n); char nam1[41]="das"; char nam2[41]=

静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数

1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配.重载函数使用静态联编. 2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编.switch语句和if语句是动态联编的例子. #include<iostream> void go(int num) { } void go(char *str) { } //class //::在一个类中 class A { public: void go(int num) { } void go(char *str) { } }; void

一起学Java(二十六)----- 对象之间赋值

不积跬步,无以至千里:不积小流,无以成江海. Java语言基础 Java对象之间赋值 赋值是用等号运算符“ = ”进行的,在对对象进行“赋值”时,实际就是将句柄从一个地方复制到另一个地方.这意味着假若为对象使用“A = B”,那么A和B最终都会指向最初只有B才指向的那个对象.也就是说这个时候他们两个引用了同一块内存地址. class Number{ int i; } public class Test { public static void main(String[] args) { Numb

同类型结构体之间赋值不一定有效

同类型结构体之间赋值不一定有效 今天为这个问题debug好久... 之前看到一个关于结构体使用的技巧, 这个技巧能够避免内存零碎. 保证结构体所属内存尽量不要零散化. struct struct_name { element_type varible; ...; element_type  pointer[0]; } 关于该用法的介绍. http://blog.csdn.net/cinmyheart/article/details/28985843 对于普通的结构体, struct num {

C++:地址传递以及赋值操作的内存管理规范

# C++:地址传递以及赋值操作的内存管理规范# 为了保证类实例能确定.有效的清除自己创建的内存占用,同时保证低内存占用,应该使类内部的数据尽量使用引用传递,对于外部传入的对象本身可以使用引用传递,对于外部对象拥有的各种数据,例如其他对象或是已经传入到内部的对象的字段.方法返回值,都应该使用复制值操作来获取数据,而不是重复使用引用. 关于引用对象本身而不是对象的数据,这里有一个正确的数据保证这样做的有效性.如果引用的对象先消失,则它可以清除自己的内存,如果引用者先消失,也不会影响引用的对象的内存

深入研究:对变量以及指针重新赋值过程中原本的地址是否会改变。(按值传递机制的深入)

在研究按值传递机制时,发现一些模糊的概念.就是在对一个原本的(指针)变量重新给定另外一个值时,会不会改变这个变量原本所在的内存位置(即地址).因此,决定深入研究一下.而且这也是必要的. 给一个变量重新赋值时,地址的变化 1 //验证变量在被赋值(以及被重赋值)时原本分配的内存地址是否会改变. 2 3 #include <stdio.h> 4 5 int main(void) 6 { 7 int a;//声明a,即已经给a分配一个内存地址 8 printf("声明a时的地址:%p\n&

c/c++(疑4) 指针数组和数组指针之间关系

 1 指针数组和数组指针概述(数组指针(指向数组的指针)与指针数组(存放指针的数组)) 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定.它是"储存指针的数组"的简称. 数组指针:首先它是一个指针,它指向一个数组.在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.它是"指向数组的指针"的简称. 认识指针数组和数组指针从内存方面分析 1 int *ptr1[5]; 2 int (*ptr2)[5]; 要分析上面的问题