精华内容
下载资源
问答
  • c++取地址
    千次阅读
    2022-03-18 17:17:34

    void main() 

        int a = 100; 
        int *ap = &a; 
        printf("%p\n",&a);//输出:002AF744 
        printf("%p\n",ap);//输出:002AF744 
        printf("%d\n",*ap);//输出:100 
        printf("%p\n",&ap);//输出:002AF738 
        printf("%p\n",&*ap);//输出:002AF744 
        scanf("%d"); 
    }

    1. printf("%d\n",&a);//输出:002AF744

    这一句输出的是变量a的地址,毋庸置疑。

    2. printf("%d\n",ap);//输出:002AF744

    这一句是输出的指针的值,与的一个输出相同,也就是说指针的值是指针所指向的变量的地址

    3. printf("%d\n",*ap);//输出:100

    在指针变量的前面加了一个*号,不加星号的ap指针是指向变量a的地址,而加了*真变成了指针ap所指向的变量a的内容,

    所以,我们可以理解为*号是获取指针变量所指向的地址所存放的内容的操作,即为解引用操作符。

    4. printf("%d\n",&ap);//输出:002AF738

    这一句(同1)是取得指针变量ap的地址

    5. printf("%d\n",&*ap);//输出:002AF744

    这一句根据第3点的分析,*ap指向的是变量a的内容,而&*ap即是获取变量a的内容的地址,即是变量a的地址所以输出内容同(1)

    更多相关内容
  • c++实现获取本机IP地址源码
  • 先看下面的程序: 代码如下:void main() { int a = 100; int *ap = &a; printf(“%p\n”,&a);//输出:002AF744 printf(“%p\n”,ap);//输出:002AF744 printf(“%d\n”,*ap);//输出:100 printf(“%p\n”,&ap);...
  • 本文实例讲述了C++获取本机MAC,IP,MASK地址的方法,分享给大家供大家参考。具体方法如下: 代码如下:#include “InitSock.h”  #include     #include   #pragma comment(lib, “IPHLPAPI.lib”)    u_char...
  • 获取计算机MAC地址和硬盘序列号的C++代码
  • 主要为大家详细介绍了C++如何获取本机IP地址小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 底层函数获取windows磁盘序列号 mac地址。 硬盘序列号,英文名:Hard Disk Serial Number,该号是硬盘厂家为区别产品而设置的,是唯一的。网上搜索一下,发现获取硬盘序列号的代码遍地都是,但很多是错误的。典型...
  • 主要为大家详细介绍了C++如何获取系统信,C++获取IP地址、硬件信息等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • C++ 指针与取地址&

    千次阅读 2021-06-15 19:05:58
    C++的指针和引用因为涉及到地址地址当中的存储内容,所以比较容易混淆。首先需要注意的是,指针和引用存放的都是被引用对象的地址地址地址!比如对于指针,当我们定义一个指针p,比如说int* p = &a时,...

    总结:

    char a = '1';
    char *b = 0;
    b = &a;
    

    b中存放的是所指向数据的地址,而&b中存放的是存放指针的地址;b中存放的指向数据的内容必须得先初始化后才可以使用*b获取数据内容或者对其进行赋值,不然会出现内存溢出问题;


    C++的指针和引用因为涉及到地址和地址当中的存储内容,所以比较容易混淆。首先需要注意的是,指针和引用存放的都是被引用对象的地址!地址!地址!比如对于指针,当我们定义一个指针p,比如说int* p = &a时,指针p必须指向一个地址(即等号右边必须是一个地址)。而*p则表示该地址中包含的内容(即a)。&这里是取地址符号,不是引用,但作用也是和地址相关,及取出变量的地址。

    好,现在我们接触到了第一个地址,就是变量的地址,这个地址中存放了变量的内容,在下面的例子中可以认为这个地址中存放着5这个数字。但是需要注意,还有一个地址不能被混淆,就是指向变量的指针自己的地址,因为指针也是需要存储空间的。这里指针变成了这个存储空间的内容,其地址和指针指向的地址无关,可以用取地址符号取出验证。

    下面来看一下简单的例子。

    #include <iostream>
    using namespace std;
     
    int main()
    {
      int a = 5;
      //指针p必须指向一个地址,不能用int*p = a
      //因为a只是一个变量,不能表示内存地址
      int* p = &a;
     
      cout << "a = " << a << endl;
      //*p表示指针指向的地址中的内容
      cout << "*p = " << *p << endl;
     
      cout << "&a = " << &a << endl;
      //p表示指针指向内容的地址
      cout << "p = " << p << endl;
     
      //这里&p是取指针的地址,和a及其地址没有任何关系
      cout << "&p = " << &p << endl;
      return 0;
    }
    

    运行的结果如下,即*p == a, p == &a, 而&p是指针p自己的存放地址,与a无关。

    以上是最基本的指针操作,但是除了基本的数据类型,指针还可以指向其他的复杂数据类型。以数组为例,数组的特殊之处在于,数组名即可以表示数组的名称,和之前的a一样,可以表示该数组的首地址和之前的&a一样,那么,int*p = a;这样的语句就可以成立。

    int b[] = {1, 2, 3};
      int* q = b;
     
      cout << "&b = " << &b << endl;
      cout << "b = " << b << endl;
      //这里可以发现,&b == b
     
      //这里q和b的功能上就完全一致了
      cout <<"q = " << q << endl;
      cout << "b[1] = " << b[1] << endl;
      cout << "q[1] = " << q[1] << endl;
     
      //同样的,q自己的地址和b没有任何关系
      cout <<"&q = " << &q <<endl;
    

    对于其他的复杂的或者自己定义的数据类型,在使用指针指向该类型的数据时,需要注意该类型的名称是否可以表示其首地址。还是最一开始的那句话,指针一定要指向地址,不能直接指向变量,除非该变量可以同时表示某个地址。比如自定义的结构体,结构体名称就不能表示该结构体的地址,所以使用方法要参考一般数据类型的,而不是数组的。另外,当指针指向结构体时,访问其内容的变量时不能用".“而要使用”->", 或者使用"*“号配合”."一起使用。

    struct student
    {
      string name;
      int score;
    };
     
     
    int main()
    {
      student st1;
      student st2;
      st1.name = "xiaoli";
      st1.score = 70;
     
      // 这里涉及到结构体指针,同样等号右边需要是一个地址
      // 这里注意的是,结构体名称不像数组名称一样可以表示地址
      student* m = &st1;
      cout << "st1.name = " << st1.name <<endl;
      cout << "m->name = " << m->name << endl;
      cout << "(*m).name = " << (*m).name << endl;
      
      return 0;
    }
    

    参考文章

    [1]C++ 指针与取地址&

    展开全文
  • C++ 获取内存地址(取值运算符)

    千次阅读 2021-07-21 13:36:34
    c++ 获取内存地址使用取值运算符 : & 下面看下& 的使用 #include <iostream> using namespace std; int main() { string var1 = "c++"; int var2 = 10086; cout << "var1 变量的地址: ";...

    c++ 获取内存地址使用取值运算符 : &

    下面看下& 的使用

    #include <iostream>
    using namespace std;
    int main()
    {
         string var1 = "c++";
         int var2 = 10086;
         cout << "var1 变量的地址: ";
         cout << &var1 << endl;
         cout << "var2 变量的地址: ";
         cout << &var2 << endl;
    
    };
    

    打印结果:

     

    展开全文
  • C++取地址符&用在函数的形参的优势

    千次阅读 2020-02-09 15:19:40
    书上很多形参前面都加了一个取地址符号,这到底是什么意思呢? 原来,这是C++的引用,一种语法。由于我以前没有学过C++,也就在这几天待在家里学了一下,所以在debug两个小时过程中发现它的好处! 引用 引用变量是一...

    &用在形参有什么好处呢?

    最近我在复习数据结构,在打代码时发现了一个问题。书上很多形参前面都加了一个取地址符号,这到底是什么意思呢?
    原来,这是C++的引用,一种语法。由于我以前没有学过C++,也就在这几天待在家里学了一下,所以在debug两个小时过程中发现它的好处!

    引用

    引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。下面我举一个例子来说明引用作为形参的好处!

    我们看下面这个函数。

    void fuzhi(int a)
    {
    	a=1;
    }
    

    这是个赋值函数,学过C语言的都知道,这样并不会改变实参的值。
    因此我们便把函数改成这样

    
    void fuzhi1(int *a)
    {
    	*a=1;
    }
    

    因为把实参的地址传了进去,由于实参和形参的逻辑地址相同。因此地址内容的值改变了,实参也改变了。
    但是!
    如果传进去的地址的值改变了怎么办呢?例如下面这种情况

    void fuzhi2(int *a)
    {
    	a=(int*)malloc(sizeof(int));
    	*a=2;
    }
    

    malloc函数给a动态分配了一个新的内存空间,同时也给了一个新逻辑地址
    这是,这个函数就起不到赋值的效果了,因为内容为2的是另一个逻辑地址里面的内容而不是实参逻辑地址里面的内容了,因此,如果我们形参的逻辑地址变了,实参的逻辑地址也变了的话,便可以实现此功能,而引用
    正好可以实现这个功能!
    当代码如下图所示时,传进去的a地址变了后,相当于对实参进行操作,实参地址也跟着改变,因此最终赋值成功!

    typedef struct nn
    {
    	int a;
    }*type,tt;
    void fuzhi3(type &a)
    {
    	a=(type)malloc(sizeof(tt));
    	a->a=2;
    }
    int main()
    {
    	
    	type c;
    	fuzhi3(c);
    	cout<<c->a<<endl;
    	
    }
    }
    

    结果如下
    在这里插入图片描述

    展开全文
  • 浅谈C/C++数组取地址

    千次阅读 2022-03-28 18:43:07
    浅谈C/C++数组取地址 https://www.cnblogs.com/mudao/p/5443846.html 解析:数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p https://blog.csdn.net/loongkingwhat/article/details/78910921
  • C/C++代码实现掩码位数算网络和广播地址,基本上用的是C指针代码实现,指针,二级指针,以及自定义类型等的应用。
  • C++中的取地址符(&)

    千次阅读 2019-12-23 22:51:00
    这个符号特别容易混淆, 因为在C++中, &有两种不同用法: 获得变量地址 引用传递 第一个例子, int main() { std::string s = "Hello"; std::string*p = &s; std::cout << p << std::endl; ...
  • C++读某个内存地址对应的值

    千次阅读 2020-09-04 17:06:19
    C++读某个内存地址对应的值 举个栗子,这里的内存地址对应的是int类型,读取时候需要将地址,转化为int类型的指针,然后用*运算符取得该地址对应的值。 0x61fe08为我想要读的内存地址,代码如下: int result=*(int ...
  • C++中,既有引用又有取地址,好多人对引用和取地址不是很清楚,因此也无法区分。其实他们的区别可以用一句话概括:和类型在一起的是引用,和变量在一起的是址。下面我们通过实例具体了解一下 1)
  • 本文主要给大家介绍了关于如何获取C++类成员虚函数地址的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍: 1.GCC平台 GCC平台获取C++成员虚函数地址可使用如下方法[1]: class Base{ int i;...
  • C/C++获取系统IP地址

    千次阅读 2022-02-19 16:46:12
    说明:使用该封装的函数,必须保证/etc/hosts下有主机名和IP的对应关系,否则会失败。 封装 #include <unistd.h> #include <netdb.h> #include <stdio.h> #include <... c
  • HMODULE GetProcessModuleHandle(DWORD pid, CONST TCHAR* moduleName){ // 根据 PID 、模块名(需要写后缀,如:".dll"),获取模块入口地址。 MODULEENTRY32 moduleEntry; HANDLE handle = NULL; handle = ::...
  • C/C++获取广播地址

    2022-02-18 12:46:03
    说明:通过IP地址和网络掩码来获取广播地址 封装 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> int ...
  • VC如何获得IE窗口的地址栏URL
  • 总结C++成员函数地址的几种方法 这里, 我整理了4种C++成员函数地址的方法, 第1,2,4种整理于网上的方法, 第3种cdecl_cast是我自己想到的.  其中, 第4种(汇编)的方法不能在VC6上编译通过. 推荐使用第1,2种...
  • 因此,如果要获得本机所有网卡的IP和MAC地址信息,则必须顺序获得每个网卡,再依次获取其信息等;在windows sdk中,用IP_ADAPTER_INFO结构体存储网卡信息,包括网卡名、网卡描述、网卡MAC地址、网卡IP等,该结构体的...
  • 作为取地址运算符时,假设 char ch = 'a'; 那么&ch是一个右值,而不是一个合法的左值。因为该表达式并未标识任何机器内存的特定位置,对&ch进行求值时,其结果没有地方存储,所以&ch不是一个合法的...
  • 一.const成员 将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的... 取地址及const取地址操作符重载 这两个默认成员函数一般不用重新定义 ,编译器默认会生成。 cl..
  • 主要介绍了C++获取类的成员函数的函数指针详解及实例代码的相关资料,需要的朋友可以参考下
  • c/c++实现获取域名的IP地址 // GetHostIP.cpp : 定义控制台应用程序的入口点。 // #include stdafx.h #include #include #include #include #pragma comment(lib, ws2_32.lib) int main(int argc, char **argv)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 318,762
精华内容 127,504
关键字:

c++取地址

c++ 订阅