对于c语言中的&运算符,百度百科是这样定义的:(&p)则是这样一种运算,返回当时声明p 时开辟的地址;但是根据我对代码的观察,我觉得&运算符不只是返回地址的功能;

例如:

int a = 1;

//假设a的地址是0x7dfe88

int *p = (int *)0x7dfe88;

int num = 1;

int *p1 = #

以上是一段简单的给指针p,p1赋值的代码,0x7dfe88是一段单纯的十六进制地址,但是当地址转指针的时候却必须加上强转(int *);如果不加强转,那么编译器就会提出警告( warning C4047: “初始化”:“int *”与“int”的间接级别不同);但是使用&运算符取地址的时候却不需要加任何强转就能编译通过,说明&运算符绝不是的获取地址那么简单,“=”赋值运算符的运算顺勋是从右向左,说明"="的右边也是一个指针,所以在此假设&运算符会取出num的地址,并且根据num的类型生成一个临时的指针。

根据假设,写出如下代码验证:

int num = 1;

double *p1 = #

结果编译器报“ warning C4133: “初始化”: 从“int *”到“double *”的类型不兼容”错误。所以我的假设有一定的道理。

综上所述:

(&p)则是这样一种运算,返回一个指针,该指针的值是当时声明p 时开辟的地址,指针的类型是p的类型对应的指针类型。(只是本人自己观点)

通过对指针&运算符的理解,我认为*运算符在某些情况下(例如二级指针)同样有将一个地址转化成指针的功能。

例子:

int num = 1;

int *p = #

int **p1 = &p;

int *p2 = *p1;

如果将int *p2 = *p1;替换成double *p2 = *p1;,那么编译器会警告: warning C4133: “初始化”: 从“int *”到“double *”的类型不兼容

所以(*p)操作是这样一种运算,获取指针p的值(变量的地址)找到对应的变量的值-----返回以(p 的值作为地址)的那个空间的值。

终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good

这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ------------------------------------------------- ...

C语言一维指针的深入理解

指针是C语言中广泛使用的一种数据类型.运用指针编程是C语言最主要的风格之一. 利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串:并能象汇编语言一样处理内存地址,从而编出精练而高效的程序.指 ...

C语言语法之运算符及优先级

注:该内容整理自以下链接. http://blog.csdn/huangblog/article/details/8271791 表:C语言运算符及优先级 优先级 运算符 名称或含义 使用形式 ...

go语言基础之运算符

一.运算符分类 1.1 算术运算符 运算符 术语 示例 结果 + 加 10 + 5 15 - 减 10 - 5 5 * 乘 10 * 5 50 / 除 10 / 5 2 % 取模(取余) 10 % 3 ...

C语言基础知识-运算符与表达式

C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...

[转载]C++中 引用&与取地址&的区别

一个是用来传值的 一个是用来获取首地址的 &(引用)==>出现在变量声明语句中位于变量左边时,表示声明的是引用.     例如: int &rf; // 声明一个int型的引用r ...

C++中 引用&与取地址&的区别

微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

C语言的数组名和对数组名取地址

http://blog.csdn/zdcsky123/article/details/6517811 相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针, ...

C语言函数名以及取地址的区别和联系

有时看到如下的代码: /*****************************/ #include #include #inclu ...

随机推荐

java 入门 第二季4

1. 多态 继承是多态的实现基础 引用的多态 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 方法的多态 创建本类对象时,调用本类方法 2种是调用子类的方法或继承的方法 子类中添加独有的方 ...

java使用jdbc对sqlite 添加、删除、修改的操作

package com.jb.jubmis.Dao.DaoImpl; import java.io.File;import java.io.FileInputStream;import java.io ...

TCP/UDP简易通信

TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的 ...

php的Memcached模块扩展

Memcached模块介绍       Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态. ...

Spring入门详细教程(一)

一.spring概述 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的 ...

MongoDB数据库基础

MongoDB简介 MongoDB是一种文档型的非关系型数据库(NoSQL),举例如下: {“foo”:,"greeting":"Hello,world!"} ...

Stringbuffer与substring

1. Stringbuffer 有append()方法 Stringbuffer 其实是动态字符串数组 append()是往动态字符串数组添加,跟“xxxx”+“yyyy”相当那个‘+’号 跟Stri ...

作业六:分析Linux内核创建一个新进程的过程

分析Linux内核创建一个新进程的过程 进程描述符PCB----task_struct数据结构 操作系统:1.进程管理 2.内存管理 3 文件系统 一.新进程如何创建和修改task_struct数据结 ...

数据类型-DataFrame

数据类型-DataFrame DataFrame是由多个Series数据列组成的表格数据类型,每行Series值都增加了一个共用的索引 既有行索引,又有列索引 行索引,表明不同行,横向索引,叫inde ...

javaSE——File文件的操作

File文件操作: 在java中,File是文件和文件夹的总称. 在java中也是一个类,可以创建多个file对象. File类的一些API import java.io.File; public c ...

更多推荐

在C语言中 ( )表示取地址运算符,c语言 &取地址运算符的理解