首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果array_name是一个指针,为什么不是int *ptr = array_name而不是指向指针的指针

array_name是一个指针,它存储了数组的首地址。如果我们想要通过指针来访问数组的元素,我们可以使用以下两种方式:

  1. 使用指针变量直接访问数组元素:
  2. 使用指针变量直接访问数组元素:
  3. 在这种情况下,ptr指向数组的首地址,我们可以通过对ptr进行解引用来访问数组的元素,例如*ptr表示数组的第一个元素,*(ptr + 1)表示数组的第二个元素,以此类推。
  4. 使用指向指针的指针访问数组元素:
  5. 使用指向指针的指针访问数组元素:
  6. 在这种情况下,ptr_ptr是一个指向指针的指针,它存储了指向array_name指针的地址。我们可以通过对ptr_ptr进行解引用来获取array_name指针的值,然后再对array_name指针进行解引用来访问数组的元素,例如**ptr_ptr表示数组的第一个元素,*(*ptr_ptr + 1)表示数组的第二个元素,以此类推。

选择使用哪种方式取决于具体的需求和代码设计。通常情况下,直接使用指针变量来访问数组元素更为常见和简洁。而指向指针的指针在某些特定场景下可能会用到,例如在函数中传递指针的指针以修改指针的值。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

指针进阶(从零到一)【纯干货】【C语言】

变量类型为 char *,表示该变量一个指向字符型数据指针。我们可以通过 *str 来访问该指针指向内存单元中存储值。 ...数组指针应用 1.指向已有数组指针  int arr[5]; int (*ptr)[5] = &arr ; 在该例子中,我们首先定义了一个整型数组arr,然后使用&arr获取该数组地址,并将其赋值给指针变量...指针数组声明 type *array_name[size]; 其中,type指针数组中每个元素类型,array_name指针数组名称,size数组大小。...int(*parr)[10] = &arr;//parr指向数组指针,存放数组地址 int (*pf)(int, int) = &Add;//pf就是一个函数指针变量 return 0;...函数指针数组初始化 函数指针说明 return_type (*array_name[size]) 其中,return_type 函数指针指向函数返回值类型,array_name 函数指针数组名称

9110

c语言进阶部分详解(指针进阶2)

它表示signal一个函数,接受两个参数:一个int类型参数和一个指向接受int类型参数并返回void函数指针参数。...该函数返回一个指向接受int类型参数并返回void函数指针结果 二.函数指针数组 1.讲解与实例 函数指针数组: 函数指针数组一个数组,其中每个元素都是一个函数指针。...(*array_name):函数指针数组名称。它是一个指针指向一个数组。 [size]:函数指针数组大小。它表示数组中函数指针数量。...指向函数指针数组指针一个 指针指针指向一个数组 ,数组元素都是函数指针 指向函数指针数组指针语法如下: return_type (*(*pointer_name)[size]...如果你把函数指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向函数时,我们就说这是回调函数。

8910

指针数组做main函数形参

指针数组 1.1 基本概念 指针数组一个数组,其中每个元素都是指针。 这意味着数组中每个元素都存储一个地址,该地址指向内存中某个位置。...指针数组声明形式为: data_type *array_name[size]; //示例: int *p[10];//该指针数组包含10个整型地址 1.2 简单示例 以下一个简单示例,演示了如何声明和使用指针数组...1. main函数原型通常定义为 int main(int argc, char *argv[]); 说明: 其中,argc 表示命令行参数数量,argv 一个指针数组,每个元素都是一个指向以 null...如果main函数带参数的话,则第一个参数必须int型,第二个参数必须字符指针数组 char *xx[],参数只能由操作系统给出。...2.2 简单示例 下面例子中,argc 表示命令行参数数量, argv 一个指针数组,其中每个元素都是一个指向字符串指针。程序通过循环遍历 argv 数组,输出每个命令行参数内容。

9410

使用 C++ 智能指针遇到

不能 shared_ptr vs weak_ptr shared_ptr 使用条件:有多个使用者共同使用同一个对象 假如 一个类成员 指针,这个普通类 可以被值拷贝。...一个类成员 指针浅拷贝,避免更大开销 可以使用shared_ptr 多线程多读少写 读写一致性 利用shared_ptr和互斥锁来模拟读写锁 shared_ptr 不使用条件(需要改写):双向链表...对象所有权 在编程语言中,对堆对象内存管理一个麻烦又复杂问题。一不小心就会带来问题(堆上数据通过指针来访问。) C++里多个变量指向同一块内存导致重复释放。..., 为什么发明三个 不是一个,来一统天下。 unique_ptr 代替全部原始指针吗? 答:不是的,如果使用不当会造成 core 或者 不执行析构函数。 在类成员,或者函数参数传递。...boost\smart_ptr\weak_ptr.hpp 如果 weak_ptr 指向某一 shared_ptr 指针拥有的堆内存, 则 weak_ptr指向该块存储空间(可以访问,但无所有权) weak_ptr

2.6K50

对象引用和对象指针

ptr 一个指向对象指针 *ptr 表示指针指向对象。因此,ptr 和 *ptr 意思不同。 当你想通过指针访问对象成员时,可以使用 -> 运算符。...为什么对象指针需要解引用,而对象引用就不需要 对象指针和对象引用工作方式不同。对象指针存储对象地址,不是对象本身。...因此,当你想通过指针访问对象时,需要先解引用指针,才能获取指针指向对象。 例如,假设你有一个指向 MyClass 对象指针 ptr。...如果你想通过引用访问该对象 x 成员,可以直接这样写: int a = ref.x; 为什么->运算符可以简化代码 -> 运算符一种特殊运算符,用于通过指针访问对象成员。...C++风格 C++程序员在“类型”中思考 int* pValue; 读取“pValue 类型指向 int 指针”。 当然,编译器完全没有看到任何区别。

7110

Go 指针与引用:值传递和址传递

: 0xc000048080 *ptr 指针值: 100 *ptr 指针值: 200 *ptr 没有操作,为什么值发生了变化 ptr 指针类型,并被赋予了 num 内存地址,当num值发现变化时...指针说明 (1) 指针指针一个变量,只不过这个变量存储一个地址,指向内存一个“存储单元”,即指针一个实体;引用跟原来变量实质上一个东西,只不过原变量一个别名而已。...如: int a=1; int *p=&a; 上面2 行代码,定义了一个整形变量和一个指针变量p,该指针变量指向a存储单元,即pa存储单元地址。...1.值引用赋值 比如 a:=b,这样修改a.name=“ls”,不会影响到b.name,值引用是复制结构体,开辟一块新内存空间, a只是b一个副本,不是指向b引用。...总结2:值引用只是复制一个副本,不是指向内存地址引用;指针引用,指针指向内存地址引用,因此使用它操作不是结构体副本而是本身。

1.7K20

善用shared_ptr,远离内存泄漏(文末福利)

《为何优先选用unique_ptr不是指针?》中说到,如果有可能就使用unique_ptr,然后很多时候对象是需要共享,因此shared_ptr也就会用得很多。...下面三种常见定义方式: shared_ptr sp;//声明一个指向int类型智能指针 sp.reset(new int(42)); auto sp1 = make_shared("hello");//sp1一个智能指针 shared_ptr sp2(new int(42)); make_shared方式推荐一种,它使用一次分配,比较安全。...关于参数传值问题,可以参考《传值与传指针》和《令人疑惑引用和指针》。 reset 调用reset会减少计数: sp.reset() 如果sp唯一指向该对象,则该对象被销毁。...*/ delete p;/*不要这样做*/ return 0; } 如果对象不是new分配,请传递删除器 与unique_ptr类似,它可以指定删除器,默认使用delete。

1.7K10

Go语言指针

指针指向一个变量内存地址。使用指针可以使很多操作变得简单,但同样提高了编程难度和程序可读性。C语言指针使得很多初学者头疼一个重要点。...那么p1就是一个指针指针。 Go语言指针概念上基本等同于C语言指针,写法上也完全一致,同样使用*标识,同样使用&作为取地址运算符。我想指针和结构体,为什么Go被称为类C语言原因。...你可以把nil看作一个特殊值,不是一种类型。...{ fmt.Println("p1指针") } else { fmt.Println("p1不是指针") } } // p1指向地址为:0 // p1指针 指针数组 指针数组指的是数组元素类型指针...++ { fmt.Printf("arr[%d]地址%x,存储%d\n", i, ptr[i], *ptr[i]) } } 指针指针 如果一个指针变量存放一个指针变量地址,则称这个指针变量为指向指针指针变量

61900

来看看这些嵌入式工程师常见面试题你会不会

: 1) #define 语法基本知识(例如:不能以分号结束,括号使用,等等) 2) 懂得预处理器将为你计算常数表达式值,因此直接写出你如何计算一年中有多少秒不是计算出实际值,更清晰没有代价...如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做基本原理。 如果他们基本答案:"我被教着这样做,但从没有想到过为什么。"这会给我留下一个坏印象。...a) 一个整型数(An integer) b)一个指向整型数指针( A pointer to an integer) c)一个指向指针指针,它指向指针指向一个整型数( A pointer to...第三个意味着a一个指向常整型数指针。 第四个意思a一个指向整型数指针(也就是说,指针指向整型数可以修改,但指针不可修改)。 最后一个意味着a一个指向常整型数指针。...这段代码目的用来返指针*ptr指向平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码: int square(volatile int *ptr) {

64320

【C++】详解多态底层原理

另外,同一个类实例化出来多个对象,它们共用一张虚函数表如果每个对象里面都放一张虚函数表,是不是有点浪费啊。 它们虚函数指针都是一样指向同一张虚函数表。 2....那第二个为什么必须父类指针或引用去调用虚函数呢? 因为父类指针和引用是不是既可以指向子类对象,也可以指向父类对象啊,我们之前学过,它支持赋值转换(切片)嘛。...所以this指针应该指向子类对象起始地址,那现在ptr1刚好就指向子类对象起始,所以它可以直接去正常调,ptr2指向不是不对啊,他现在指向子类对象中父类Base2部分起始位置。...所以要对ptr2指向进行修正。 上面的sub ecx ,8这句汇编其实就是在修正this指针位置。...sub这个指令用于执行减法操作,所以它意思给this指针-8,ptr2现在执行Base2,它前面有一个base1,Base1这个类大小刚好就是8,这样一减,刚好就指向子类对象起始位置了。

42010

EasyC++30,函数指针从进阶到放弃……

如果不是知道这里用一个函数指针,乍一看想要看明白估计不太容易。...到这里还没结束,还有更恐怖如果我们想要定义一个指向这个数组指针,应该怎么办呢?如果使用auto可以写成: auto ptr = &pt; 如果不使用auto呢?...首先我们可以想到,这个声明基于pt,我们需要在pt声明上加上一个*,但问题加在哪里呢? 进一步分析,会发现我们需要指出这是一个指针不是数组。...意味着核心部分应该写成(*ptr)[3],表示这是一个指向长度为3数组指针。因为[]优先级更高,所以需要使用括号。如果写成*ptr[3]表示这是长度为3指针数组。...而且这还不是最复杂情况,比如函数返回类型又是一个指向一个函数指针……明摆着告诉我们含义我们仍然要推敲一会,如果在一段不明代码当中遇到,可能会直接抓狂吧…… 也正因此,C++11当中推出了auto

15610

什么智能指针

还有一个例子,Java 中往容器中放对象,实际放入引用,不是真正对象, C++ 在 vector 中 push_back 采用值拷贝。...这样两个指针指向不同对象,其中一个对象是另一个对象副本,缺点浪费空间,所以智能指针都未采用此方案。 建立所有权(ownership)概念。...如果编译器没有提供 shared_ptr,可使用 Boost 库提供 shared_ptr。 (2)如果程序不需要多个指向一个对象指针,则可使用 unique_ptr。...如果函数使用 new 分配内存,并返还指向该内存指针,将其返回类型声明为 unique_ptr 不错选择。...另外,如果按值不是按引用给 show() 传递对象,for_each() 将非法,因为这将导致使用一个来自 vp 非临时 unique_ptr 初始化 pi,而这是不允许,编译器将发现错误使用 unique_ptr

61920

最容易出错C语言指针

3.指针值----或者叫指针指向内存区或地址   指针指针本身存储数值,这个值将被编译器当作一个地址,不是一个一般数值。...如果上例中,ptr 被减去5,那么处理过程大同   小异,只不过ptr 被减去5 乘sizeof(int),新ptr 指向地址将比原来ptr指向地址向低地址方向移动了20 个字节。...好了,当一个指针表达式结果指针已经明确地具有了指针自身占据内存的话,这个指针表达式就是一个左值,否则就不是   一个左值。在例七中,&a 不是一个左值,因为它还没有占据明确内存。...[10],但如果把array 看做指针的话,它指向数组第0 个单元,   类型int* 所指向类型数组单元类型即int。...实际上,sizeof(对象)测出都是对象自身类型大小,不是别的什么类型大小。

1.1K40

最容易出错C语言指针

3.指针值----或者叫指针指向内存区或地址   指针指针本身存储数值,这个值将被编译器当作一个地址,不是一个一般数值。...如果上例中,ptr 被减去5,那么处理过程大同   小异,只不过ptr 被减去5 乘sizeof(int),新ptr 指向地址将比原来ptr指向地址向低地址方向移动了20 个字节。...好了,当一个指针表达式结果指针已经明确地具有了指针自身占据内存的话,这个指针表达式就是一个左值,否则就不是   一个左值。在例七中,&a 不是一个左值,因为它还没有占据明确内存。...[10],但如果把array 看做指针的话,它指向数组第0 个单元,   类型int* 所指向类型数组单元类型即int。...实际上,sizeof(对象)测出都是对象自身类型大小,不是别的什么类型大小。

90620

借问变量何处存,牧童笑称用指针,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang类型指针(Pointer)使用EP05

指针指什么?指针存储另一个变量内存地址变量。变量一种使用方便占位符,用于引用计算机内存地址,一个指针变量可以指向任何一个内存地址它指向那个值内存地址。...* 关键字如果在赋值操作值左边,指该指针指向变量;* 关键字如果在赋值操作符右边,指从一个指针变量中取得变量值,又称指针解引用。    ...值类型数据,如果通过变量进行传递到方法作用域中,方法内作用域内操作实际上另外一个对象,比如: package main import ( "fmt" ) func change(val int...pptr = 3000 变量 a = 200 指针变量 *ptr = 200 指向指针指针变量 **pptr = 200     可以看到发生了连锁反应,起始指向和最终指向都发生了变化,可谓牵一发动全身...现实问题,go lang这种“次时代”新潮流编程语言,为什么不像Java那样,仅仅实现“引用”,一定非得给出“指针实质概念呢?

44840

计算机考研复试C语言常见面试题「建议收藏」

因为此时p2指向p1内存地址,p1则改为指向其他地址(实测指向0地址) unique_ptr (替换auto_ptr)unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象...为了解决循环引用导致内存泄漏,引入了弱指针weak_ptr,weak_ptr 一种不控制对象生命周期智能指针, 它指向一个 shared_ptr 管理对象....把类A里面的shared_ptr pb_,改为weak_ptr pb_即可 12、野指针指针就是指向一个已删除对象或者所指向空间访问受限空间指针。...为什么C++默认析构函数不是虚函数 析构函数设置为虚函数可以保证我们new一个子类时,可以使用基类指针指向该子类对象,释放基类指针时可以释放掉子类空间,防止内存泄漏。...17、函数指针 有了指向函数指针变量后,可用该指针变量调用函数 int Func(int x); /*声明一个函数*/ int (*p) (int x); /*定义一个函数指针*/ p =

1.6K30

智能指针小分析

我们为什么需要智能指针 所谓资源就是,一旦用了它,将来必须还给系统。C++中内存资源动态分配经由new与delete实现。问题在于,无论有意无意,我们有时候总会忘记释放内存中资源。...这里以auto_ptr为例,在某个时刻下,只能有一个auto_ptr指向一个给定对象。...shared_ptr则允许多个指针指向一个对象,weak_ptr指向shared_ptr所管理对象,它是一种弱引用。 shared_ptr实现基于引用计数技术。...为什么要摒弃auto_ptr 上面说到auto_ptrC++98提供智能指针,现在已经被摒弃,原因在于为了维护独占性,auto_ptr进行了不正常复制/赋值行为。...weak_ptr有何作用 weak_ptr一种不控制所指向对象生命期智能指针,它指向一个shared_ptr管理对象。

56520

C++指针详解

我看了不少书,发现有些写得差书中,就把指针这两个概念搅在一起了,所以看起书来前后矛盾,越看越糊涂。 指针指针指针本身存储数值,这个值将被编译器当作一个地址,不是一个一般数值。...如果上例中,ptr被减去5,那么处理过程大同小异,只不过ptr被减去5乘sizeof(int),新ptr指向地址将比原来ptr指向地址向低地址方向移动了20个字节。...指针表达式 一个表达式最后结果如果一个指针,那么这个表达式就叫指针表达式。...[10],但如果把array看做指针的话,它指向数组第0个单元,类型int *,所指向类型数组单元类型即int。...(对象)测出都是对象自身类型大小,不是别的什么类型大小。

48920

【小白学习C++ 教程】十、C++中指针和内存分配

「@Author:Runsen」 指针 指针保存内存位置地址变量。我们知道声明所有变量在内存中都有一个特定地址。声明一个指针变量来指向内存中这些地址。...声明指针变量一般语法int p, *ptr; //声明变量p和指针变量ptr p = 4; //赋值4给变量p ptr = &p; //将p地址分配给指针变量ptr 在内存中,这些声明将表示如下...当地址变量分配给指针变量时,它指向变量如上图所示。 由于 ptr具有变量 p 地址,*ptr 将给出变量 p 值(指针变量 ptr 指向变量)。 为什么需要 C++ 中指针?...「C++ 中使用指针动态内存分配:」 在堆部分分配内存发生在运行时,不是在编译时,因此分配堆内存称为动态内存分配。 一般来说,C++不会在堆中分配一个内存,因为在使用指针时通常会遇到复杂性。...int *ptr = new int[20]; // 上面的语句为int类型20个整数连续动态分配内存,并返回指向序列一个元素指向ptr指针

46330
领券