-
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地址源码
2021-11-16 14:18:55c++实现获取本机IP地址源码 -
C/C++指针和取地址的方法
2020-12-31 09:18:44先看下面的程序: 代码如下: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地址的方法
2020-12-26 06:29:18本文实例讲述了C++获取本机MAC,IP,MASK地址的方法,分享给大家供大家参考。具体方法如下: 代码如下:#include “InitSock.h” #include #include #pragma comment(lib, “IPHLPAPI.lib”) u_char... -
获取计算机MAC地址和硬盘序列号的C++代码
2021-10-10 18:53:43获取计算机MAC地址和硬盘序列号的C++代码 -
C++如何获取本机的IP地址
2020-08-28 06:05:36主要为大家详细介绍了C++如何获取本机IP地址小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
C++ 获取硬盘序列号 mac地址
2018-12-18 11:19:54底层函数获取windows磁盘序列号 mac地址。 硬盘序列号,英文名:Hard Disk Serial Number,该号是硬盘厂家为区别产品而设置的,是唯一的。网上搜索一下,发现获取硬盘序列号的代码遍地都是,但很多是错误的。典型... -
C++如何获取系统信息 C++获取IP地址、硬件信息等
2020-08-26 01:46:27主要为大家详细介绍了C++如何获取系统信,C++获取IP地址、硬件信息等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
C++ 指针与取地址&
2021-06-15 19:05:58C++的指针和引用因为涉及到地址和地址当中的存储内容,所以比较容易混淆。首先需要注意的是,指针和引用存放的都是被引用对象的地址!地址!地址!比如对于指针,当我们定义一个指针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:34c++ 获取内存地址使用取值运算符 : & 下面看下& 的使用 #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++指针实现网络和广播地址计算
2020-02-10 17:50:46C/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:19C++读某个内存地址对应的值 举个栗子,这里的内存地址对应的是int类型,读取时候需要将地址,转化为int类型的指针,然后用*运算符取得该地址对应的值。 0x61fe08为我想要读的内存地址,代码如下: int result=*(int ... -
C++中引用&与取地址&的区别分析
2021-01-21 18:23:44在C++中,既有引用又有取地址,好多人对引用和取地址不是很清楚,因此也无法区分。其实他们的区别可以用一句话概括:和类型在一起的是引用,和变量在一起的是取址。下面我们通过实例具体了解一下 1) -
如何获取C++类成员虚函数地址的示例代码
2020-12-31 02:33:43本文主要给大家介绍了关于如何获取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 -
C++ 获取进程某模块入口地址
2022-05-24 07:39:21HMODULE 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 ... -
如何获得浏览器窗口的地址栏URL字符串
2021-11-27 15:09:04VC如何获得IE窗口的地址栏URL -
总结C++中取成员函数地址的几种方法
2020-04-17 18:05:13总结C++中取成员函数地址的几种方法 这里, 我整理了4种C++中取成员函数地址的方法, 第1,2,4种整理于网上的方法, 第3种cdecl_cast是我自己想到的. 其中, 第4种(汇编)的方法不能在VC6上编译通过. 推荐使用第1,2种... -
C++获得本机所有网卡的IP和MAC地址信息的实现方法
2020-12-31 10:33:43因此,如果要获得本机所有网卡的IP和MAC地址信息,则必须顺序获得每个网卡,再依次获取其信息等;在windows sdk中,用IP_ADAPTER_INFO结构体存储网卡信息,包括网卡名、网卡描述、网卡MAC地址、网卡IP等,该结构体的... -
C++ 笔记 -- 取地址运算符和引用
2021-03-31 08:00:55作为取地址运算符时,假设 char ch = 'a'; 那么&ch是一个右值,而不是一个合法的左值。因为该表达式并未标识任何机器内存的特定位置,对&ch进行求值时,其结果没有地方存储,所以&ch不是一个合法的... -
C++const成员函数/取地址运算符重载
2022-04-09 20:37:57一.const成员 将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的... 取地址及const取地址操作符重载 这两个默认成员函数一般不用重新定义 ,编译器默认会生成。 cl.. -
C++获取类的成员函数的函数指针详解及实例代码
2020-08-31 07:31:34主要介绍了C++获取类的成员函数的函数指针详解及实例代码的相关资料,需要的朋友可以参考下 -
c/c++实现获取域名的IP地址
2020-12-31 04:13:08c/c++实现获取域名的IP地址 // GetHostIP.cpp : 定义控制台应用程序的入口点。 // #include stdafx.h #include #include #include #include #pragma comment(lib, ws2_32.lib) int main(int argc, char **argv)...