精华内容
下载资源
问答
  • c++指针地址
    千次阅读
    2020-10-03 00:03:20

    C/C++指针是个什么鬼?

    带着这个问题我们开始, 为什么只有C/C++ (Objective-C 也有指针,也就是C语言的面向对象版本,

    所以Objective-C 与c/c++完全通用,oc项目直接添加.c/.cpp文件,这TM扯远了,有机会还是专门写一篇来讲一下oc指针vs c++指针),其它语言c#/java 都没有这个niao东西,以至学习其它语言的同学

    看到c/c++代码的指针时,那真TM是 “雪花飘飘,北风萧萧”,心里一万个cnm在奔腾!

    指针的定义:

    指针:百度告诉我的,我特么也不是特别明白,来看!

    在信息工程中,指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中的寄存器(Register)。

    1.基本概念

    指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。

    在计算机语言中,由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

    有了这个概念呢,那么就理解一点点啦!

    就是说指针这个东西啊, 实际呢,就是一个地址,就是开发编译器这些人想出来的这么一个东西,搞编译器的人肯定是NB的,方方面面都要考虑到,要搞泛化,要开放给开发者一个东西,或者标识而设计出来的这么一个东西!

    说这么多就是总结一句话: 指针就是一个内存地址,是c/c++这种高级语言虚拟出来的一个东西,

    实际低级语言(机器语言/汇编语言)tm和整数差不多就是一样,一个东西!

    来看代码:

    看代码之前呢,你要知道哈,c/c++呢 对变量或函数呢,以tm分声明与定义 ,这个要讲的话,又会扯远了,dan疼,写了一小时了,才

    写出这么点毛毛来 ,惭愧!

    看声明:

    基本数据类型哈

    int* pintval ; int* pintval =nullptr; //指向int类型变量的指针

    double* pintval ; double* pintval =nullptr; //指向double类型变量的指针

    char* pintval ; char* pintval =nullptr; //指向char类型变量的指针

    以上是声明啊!

    那能不能这样写呢

    int* pintval=5;

    double* pintval=8.8;

    指针变量的初始化

    存储类型 数据类型 *指针名=初始地址;

    必须要是一个地址,这就和上面说的它就是一个地址对应起来了, 5,8.8还是一个常数,还没有开辟内存空间,所有没法用指针表示!

    正确要这么写 int intval=5; int* pintval=&intval; 加&就表示地址,具体原因呢,我也不知道,我也不敢问啦!

    int intval=5; 表示定义了这么一个变量, 既然是变量那么就要向操作系统申请内存啦,那么呢,申请了内存了是不是(得像我们人一样

    弄个名字呢),而计算机呢都是以数字作名字, 操作系统 呢随机最一个位置0x40001234 ,让你呢把数据5呢放在这, 那这个时候呢

    pintval 通过这句pintval=&intval,指向的就是这个0x40001234, 然后呢他的数据就是5,这样说可能表达不清,其实这个最好能调试让

    你们看下反汇编 !

    以上这句总结出来就是 pintval=0x40001234; *pintval =5;

    *pintval 官方语法说是 “解引用”, 我tm不懂那么多,就叫取值!

    不知道你理解了没有。。。 是不是真的难懂!

    指针变量的赋值运算

    指针名=地址

    注意:“地址”中存放的数据类型与指针类型必须相符

    • 向指针变量赋的值必须是地址常量或变量,不能是普通整数,例如:

      • 通过地址运算“&”求得已定义的变量和对象的起始地址

      • 动态内存分配成功时返回的地址

    那么我们定义一个指令要怎么赋值呢

    int* pintval = new int(); //c++模式

    int* pintval = new int; //c++模式

    int* pintval = (int*)malloc( sizeof(int)); //c模式

    以上呢就是为了分配内存空间,然后呢你就可以给值了, *pintval =5;

     

    总结:1. 指针就是一个地址

    2.指针的赋值呢(要么自己分配空间,要么呢用别人分配好的,然后你指向它),are you ok?

    这一篇就讲到这里,下篇接着来,还有好多,数组指针,函数指令,二级指针,void指针,this指针等 都会讲!

    反正就是要讲到你受不了!

    更多相关内容
  • C++指针地址和指针的值

    千次阅读 2018-12-28 19:57:49
    C++指针 学过C++ 都知道,指针是一个很重要的概念,他是C++的灵魂,在上学的时候从书山了解到,指针就是指向内存的地址,然,今天和同事讨论指针传递和引用传递的时候,我说:指针传递其实就是引用传递。打脸了。...

    C++指针

    学过C++ 都知道,指针是一个很重要的概念,他是C++的灵魂,在上学的时候从书山了解到,指针就是指向内存的地址,然,今天和同事讨论指针传递和引用传递的时候,我说:指针传递其实就是引用传递。打脸了。虽然他们都是对地址的操作,但是本质还是有区别的。
    在这里插入图片描述

    在这里插入图片描述
    也就是说引用传递就是变量的地址,指针传递的时候,是指针的值。但是指针的值和指针的地址是不同的。。。突然感觉自己好菜哦!!!

    展开全文
  • C++指针偏移原理

    千次阅读 2021-08-17 19:26:36
    C++中我们可以通过指针方便的访问各种类型数据,但我们都知道指针只是一个头地址,而我们需要遍历的数据通常占有大量的空间,那么指针是如何遍历其中的数据呢?这就涉及到指针偏移的一个问题,下面我们看个例子: ...

            在C++中我们可以通过指针方便的访问各种类型数据,但我们都知道指针只是一个头地址,而我们需要遍历的数据通常占有大量的空间,那么指针是如何遍历其中的数据呢?这就涉及到指针偏移的一个问题,下面我们看个例子:

    这里使用了十进制显示地址函数ip2decimal(),详情见“C++显示十进制内存地址”。

    	int a[4]={1,2,3,4};
    	int* p=&a[0];//将数组a的初始地址传给指针p
    	cout<<"指针p的地址:"<<ip2decimal(p)<<endl;
    	cout<<"a的地址分别为:"<<endl;
    	for (int i = 0; i < 4; i++)
    	{
    		cout<<ip2decimal(&a[i])<<endl;
    	}
    
    	for (int i = 1; i < 5; i++)
    	{
    		cout<<"p地址为:"<<ip2decimal(p)<<"\t数值为:"<<*p<<endl;
    		p=p+1;  //指针增加一个int的偏移量
    	}

    结果为:

            通过上述结果我们可以发现,对于一个存储多个数据的int数组,我们可以通过设定个int* p的指针,只需将数组头指针赋给指针p,便可以通过指针p每次增加一个int数据的偏移量准确获取每个int类型数据。这里int数据的偏移量为4,若为其它类型数据则只需偏移该类型的内存大小即可。        

            我们可以得出结论对于一个指针其遍历数据时,是通过数据与头地址的偏移量来获取的,而不是变量名。

     

    展开全文
  • C++ 打印指针

    千次阅读 2021-10-12 09:58:42
    //这样输出的就是指针的值 cout<<*p; //指针的值里存储的东西。。 但是有字符比较特殊,需要使用下面的方案 #include <iostream> using namespace std; int main() { char * ptr = "abc" ; ...

    通常来说直接输出就好了
    int *p;
    cout<<p; //这样输出的就是指针的值
    cout<<*p; //指针的值里存储的东西。。

    但是有字符比较特殊,需要使用下面的方案

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	
        char *  ptr  =  "abc" ;
        std :: cout  <<  ptr  <<  std  :: endl ;
     
        // 输出指针的地址
        void *  pVoid  =  ptr ;
        std :: cout  <<  pVoid  <<  std  :: endl ;
    
    	system("pause");
    	return 0;
    }

     

    C++ 打印输出指针 - 小小松 - 博客园

    展开全文
  • C++ 指针详解(转)

    千次阅读 2020-08-04 08:45:09
    (3) 使用指针存储地址 (4) 使用 * 访问指向的数据 2. 动态内存分配 (1) new/delete动态分配和释放内存 (2) 带关键字const的指针 (3) 指针 VS 数组 3. 使用指针时的常见错误 (1) 内存泄漏 (2) 无效...
  • C++内存逻辑二:指针地址

    千次阅读 2021-01-25 11:28:13
    指针创建和删除后的地址详解
  • 【小白学习C++ 教程】十、C++指针和内存分配

    千次阅读 多人点赞 2021-06-20 07:32:54
    指针是保存内存位置地址的变量。我们知道声明的所有变量在内存中都有一个特定的地址。声明一个指针变量来指向内存中的这些地址。 声明指针变量的一般语法是: int p, *ptr; //声明变量p和指针变量ptr p = 4; //赋值4...
  • c++ 指针详解

    千次阅读 多人点赞 2022-03-28 14:37:51
    使用指针遍历数组 ;指针的概念与理解; 指针的含义;指针的创建与初始化 ;指针的基本操作;指针的解引用和取地址;指针的算数操作 ;...数组的指针地址;指针的指针;const_cast ;reinterpret_cast;
  • 需求:通过函数修改指针pointtodefine,使其指向自定义的类MyClass。 方法:需要将指向该指针指针作为参数传递给函数,再在函数中修改(即指针指针作为参数传递给函数) //函数定义 void user(void ** ...
  • C++ 指针与取地址&

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

    千次阅读 多人点赞 2021-05-03 10:51:12
    C++ 指针介绍 (对象指针 & this 指针)
  • C++指针的初始化和赋值

    千次阅读 2020-02-27 09:47:41
    存储类型 数据类型 *指针名=初始地址; 例: int *pa = &a; 注意事项 用变量地址作为初值时,该变量必须在指针初始化之前已声明过,且变量类型应与指针类型一致。 可以用一个已有合法值的指针去初始化另一个...
  • c++指针类型简单总结

    千次阅读 2019-03-10 15:28:03
    c++指针类型,问题源于如下一件事情的争论。 1.如下地址设置 int array[4] = {0,1,2,3} int * p = (int )(array+1)//地址+1 int p2 = (int*)(&amp;amp;amp;amp;amp;array+1)//地址地址+1 cout&amp;...
  • c/c++两个指针变量地址的相减

    千次阅读 2019-01-11 21:37:28
       c、c++两个指针变量的相减,需要注意两个变量的数据类型。   如下例程: #include "stdio.h" #include "string.h" using namespace std; #define uint8_t unsigned char #define uint16...
  • c++ 指针指针参数

    千次阅读 2021-05-10 13:12:00
    首先,当指针作为形参时,实参向形参传递的是地址,在函数执行过程中既可以对指针变量进行操作也可以对指针所指数据进行操作(即P和*P).由于形参和实参指向同一个内存单元,当形参指向的数据改变那么实参所指向的数据也...
  • c++指针加1

    千次阅读 2018-03-27 13:38:49
    int64_t *p2; char *p1; p1=(char*)0x800000;...那么a和b的值分别是:0x800002和0x800010因为设指针p的类型为T,则p+i=(p的值)+i*sizeof(T)的字节数char是1个字节,int64_t是8个字节。p1+2=(p1中存...
  • C++输出字符型指针地址

    千次阅读 2020-10-21 16:02:25
    因此,我们用static_cast强制类型转换把字符串指针转换成无类型指针即可输出指针地址 #include<iostream> using namespace std; int main() { char *p="abc"; cout << p << endl;//"abc" ...
  • C++指针详解

    万次阅读 多人点赞 2018-12-08 22:55:09
    有好的一面,必然会有坏的一面,指针的灵活导致了它的难以控制,所以C/C++程序员的很多bug是基于指针问题上的。今天就对指针进行详细的整理。 1、指针是什么? 指针是“指向(point to)”另外一种类型的复合类型...
  • 练习题:C++指针练习

    千次阅读 2020-09-24 13:59:24
    C++中,const作用域指针时,可以看做是对指针权限的限制。这里我们先把指针的权限归为两种,分别为指向权限和修改权限。(ps:以上是为了理解方便,实际并没有如此规定) int a = 10, b = 20; int* p = &a; ...
  • 二级指针指针指针) 3.1 定义与初始化 3.2间接数据访问 3.2.1.改变一级指针指向 3.2.2改变 N-1 级指针的指向 3.2.3二级指针的步长 四. 指针与数组 4.1 指针与数组名 4.1.1 通过数组名访问数组元素 4.....
  • C和C++打印指针值和地址

    千次阅读 2020-07-24 20:15:11
    1.C++ 中指针变量的地址指针变量的值是两个不同的概念 指针变量的地址:这是指针变量这个变量在内存中的存储地址(如图所示0x1211) 指针的值:里面存放的是一个地址,此地址即为指向的内存单元的地址(如图所示0x...
  • 主要辨析一下C/C++中指针相关常见概念。 首先理解指针所指向元素与指针,他的意思就相当于地图上你家的位置与你家里的实际情况。知道了**指针**(地图上的位置),就可以知道怎么去你家,但是无法知道你家中的具体...
  • c++智能指针详解

    千次阅读 多人点赞 2022-05-18 17:48:58
    1.什么是智能指针 从比较简单的层面来看,...在c++中,智能指针一共定义了4种: auto_ptr、unique_ptr、shared_ptr 和 weak_ptr。其中,auto_ptr 在 C++11已被摒弃,在C++17中已经移除不可用。 2.原始指针的问题 原始指
  • c++指针最全总结(附源码和详细总结)

    千次阅读 多人点赞 2022-04-08 13:44:03
    哈喽,我又来啦 hello 我是「 YR_T 」 众所周知 c++相对于其它语言的 ...优势就在与c++有「 指针 」 可能你之前有学习过指针 可是 你真的把指针彻底搞懂了吗 如果还没有,那再来复习一下 ...
  • C#和c++之间相互传递函数指针C++和C#之中都有很多callback method,可以相互调用吗,怎么传递,是我表弟的问题. 1.定义c++ dll ,导出方法 // sort.cpp : 定义 DLL 应用程序的导出函数。 // #include "stdaf...
  • C++指针的作用

    千次阅读 2020-09-08 17:13:38
    利用指针就可以使用地址作为一个完整值的速记符号,因为一个内存地址在内部表示为一个整数。当数据结构本身很大时,这种策略能节约大量内存空间 2.指针使程序的不同部分能够共享数据 类似于共享内存,如果将某一个...
  • C++指针详细讲解

    千次阅读 多人点赞 2020-02-04 22:57:37
    详细讲解C++指针的原理以及应用,附加代码样例。
  • C/C++指针与内存管理

    千次阅读 2021-09-06 23:12:36
    指针 1.1 变量与内存的关系 首先来我们来看计算机内存的示意图,大致分成这几个区,每个区又分成一块块的小方格,那就是字节。 当我们写下,int a; 的时候,IDE会向系统在栈区申请一块4个字节的内存, 二.数组 三....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 778,092
精华内容 311,236
关键字:

c++指针地址

c++ 订阅