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

C指针奇怪的行为

是指在C语言中,指针的一些特殊行为或者使用方式可能会导致一些令人困惑的结果。下面是对C指针奇怪的行为的解释:

概念:

指针是一个变量,用于存储内存地址。它可以指向其他变量或者数据结构,通过指针可以访问和修改这些变量或者数据结构的值。

分类:

C指针可以分为以下几种类型:

  1. 空指针:指向空地址的指针,即不指向任何有效的内存地址。
  2. 野指针:指向未知或者无效地址的指针,使用野指针可能会导致程序崩溃或者产生不可预测的结果。
  3. 无效指针:指向已释放或者无效内存的指针,使用无效指针可能会导致程序崩溃或者产生不可预测的结果。
  4. 空指针常量:用于表示空指针的常量,通常使用NULL或者0表示。

优势:

指针在C语言中具有以下优势:

  1. 内存管理:通过指针可以直接操作内存,实现动态内存分配和释放,提高内存利用率。
  2. 数据结构:指针可以用于构建复杂的数据结构,如链表、树等,方便数据的组织和操作。
  3. 函数传参:指针可以作为函数参数,通过传递指针可以实现对变量的引用传递,避免了复制大量数据的开销。
  4. 性能优化:指针可以提高程序的执行效率,特别是在处理大量数据时。

应用场景:

指针在C语言中广泛应用于以下场景:

  1. 动态内存分配:通过指针可以使用malloc()函数在运行时动态分配内存,满足程序的灵活性需求。
  2. 数据结构:指针可以用于构建链表、树等数据结构,实现高效的数据操作和存储。
  3. 字符串处理:C语言中的字符串实际上是以字符数组的形式存储的,通过指针可以方便地对字符串进行操作。
  4. 函数传参:指针可以作为函数参数,实现对变量的引用传递,方便函数间的数据交换和共享。

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

  1. 云服务器(CVM):提供弹性、安全、稳定的云服务器实例,支持多种操作系统和应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL版:提供高性能、可扩展的云数据库服务,支持自动备份、容灾等功能。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  3. 云存储(COS):提供安全、可靠的对象存储服务,适用于图片、音视频、文档等各种类型的数据存储。详情请参考:https://cloud.tencent.com/product/cos
  4. 人工智能平台(AI Lab):提供丰富的人工智能算法和模型,支持图像识别、语音识别、自然语言处理等应用。详情请参考:https://cloud.tencent.com/product/ailab

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求和情况进行决策。

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

相关·内容

delete奇怪行为

delete奇怪行为分为2部分: // 1.delete用defineProperty定义属性报错 // Uncaught TypeError: Cannot delete property 'value...但规则是这样,所以奇怪行为1是合理 占位初始值 猜测如果属性已经存在了,defineProperty()会收敛一些,考虑一下原descriptor感受: var obj = {}; obj.value...环境(比如onclick属性值执行环境,函数调用创建执行环境)和eval环境(eval传入代码执行环境) 变量对象/活动对象 每个执行环境都对应一个变量对象,源码里声明变量和函数都作为变量对象属性存在...) P.S.变量对象与活动对象这种“玄幻”东西没必要太较真,各是什么有什么关系都不重要,理解其作用就好 eval环境特殊性 eval执行环境中声明属性和函数将作为调用环境(也就是上一层执行环境)变量对象属性存在...,能不能删可能只是configurable一部分) 遵循规则是:通过声明创建变量和函数带有一个不能删天赋,而通过显式或者隐式属性赋值创建变量和函数没有这个天赋 内置一些对象属性也带有不能删天赋

2.3K30

C - 指针C语言指针总结

C语言指针总结 1. 变量 不同类型变量在内存中占据不同字节空间。 内存中存储数据最小基本单位是字节,每一个字节都有一个内存地址,这个地址是一个十六进制数。...下面通过一张图可以更直观理解内存中地址 ? 内存中地址演示图 2. 指针 指针C语言灵魂。指针变量占据8个字节。 变量在内存中存储。 变量值:存储在变量中数据,叫做变量值。...p操作是p这个指针变量,可以取p得值,也可以为p赋值 指针变量使用 可以使用指针间接操作指针指向变量。 *p 代表 p 指针指向变量。...指针作为函数参数 如果函数参数是一个指针,那么就必须要为这个指针传递一个和指针类型相同普通变量地址,这个时候,在函数内部去访问参数指针变量时候,其实访问就是实参变量 指针作为函数参数...指针为什么要分类型? 多级指针 一个指针变量中存储是一个一级指针地址,那么它就是二级指针,一个指针变量中存储是一个二级指针地址,那么它就是三级指针

4.1K81

taskscheduler java_java – taskScheduler池奇怪行为「建议收藏」

我有两个弹簧启动应用程序(1.4.3.RELEASE),它们位于同一台服务器上.应用程序A是一个单一应用程序,其中包含用于处理警报部分代码,而应用程序B是一个仅处理警报新专用应用程序.这里目标是打破小应用程序中...threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true); threadPoolTaskScheduler.setPoolSize(100); return threadPoolTaskScheduler; } } 昨天,我经历了一个奇怪行为...已检测到警报并将其发送到新应用B – >好 >应用程序B收到警报并开始根据taskScheduler处理它 – >好 >第一步已由应用程序B处理 – >好 >第二步已由应用程序A处理 – > NOK,奇怪行为...对我来说,每个taskScheduler都附加到创建它应用程序.我哪里错了?...UPDATE 我有一个发出警报真实盒子.这些警报必须由新应用程序处理.但我还有旧盒子没有迁移到新系统.所以我在两个不同项目中有处理代码.

1.7K10

C语言 | 指向指针指针

“要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。...在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历是日积月累学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...例82:C语言用指向指针指针方法对n个整数排序并输出;要求将排序单独写成一个函数;n个整数在主函数中输入,最后在主函数中输出。...解题思路:读者看着道题时候,首先要观察一下有什么规律,然后指向指针指针在上一道练习题中已经有了铺垫,读者可以联系上一道题去熟练使用指向指针指针。...,&number);//键盘输入 for(i=0;i<number;i++) { pstr[i]=&data[i]; //将第i个整数地址赋予指针数组pstr第i个元素 }

3K32

详解c++指针指针指针引用

展示一下使用指针指针指针引用修改传递给方法指针,以便更好使用它。...(这里说指针指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针复本传递给了方法,也可以说传递指针指针值传递。...如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改指针copy而不是指针本身,原来指针还保留着原来 值。...输出是两个2 使用指针指针 展示一下使用指针指针做为参数 void func(int **p) { *p = &m_value; // 也可以根据你需求分配内存 *p...我们看一下 func(int **p)这个方法 p:  是一个指针指针,在这里我们不会去对它做修改,否则会丢失这个指针指向指针地址 *p:  是被指向指针,是一个地址。

1.3K60

C语言 | 指向指针指针排序

在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历是日积月累学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...例81:C语言实现用指向指针指针方法对5个字符串排序并输出。...解题思路:读者看着道题时候,首先要知道什么时指针,指向指针指针应该怎么用,一般在开发中不这样用,读者要看明白,这个很锻炼思维。...C语言源代码演示: #include//头文件 #include #define LINEMAX 20 //定义字符串最大长度 int main() {...char **point,*pstr[5],str[5][LINEMAX];//定义变量 for(i=0;i<5;i++) { pstr[i]=str[i]; //将第i个字符串首地址赋予指针数组

1.7K32

C++this指针

大家好,又见面了,我是你们朋友全栈君。 C++this指针 当你进入一个房子后, 你可以看见桌子、椅子、地板等, 但是房子你是看不到全貌了。...C++在初始化对象时,每个对象中数据成员都会得到系统分配自己独立存储空间。...this指针特性: 1、this指针类型const(类名const),为右值。 2、this指针本身不占用大小,并不是对象本身一部分,不影响sizeof结果。...5、只有在类非静态成员函数中才可以使用this指针, 其它任何函数都不可以。 6、this指针时刻指向对象 。 7、当this指针指向空时,是不会指向对象。...也就是说,成员函数参数不能与对象成员变量重名,如果一定要重名,就必须用this指针指明。

55320

C语言】指针(野指针)

2:如何规避野指针 1.1:指针变量初始化 2.2:指针越界访问 3.3:指针指向空间如果我们还回去的话,就把指针指针置为NULL  4.4:指针使用之前检查有效性 1:什么是野指针?...野指针:就是指针指向位置是不可知(随机性,初始化,不正确,没有明确限制),指针变量在定义时如果未初始化,其值是随机指针变量值是别的变量地址,意味着指针指向了一个地址是不确定变量,此时去解引用就是去访问了一个不确定地址...2:如何规避野指针 1.1:指针变量初始化 int a = 10; int* pa = &a; //指针变量初始化 指针常见错误 引用未初始化指针变量 试图引用未初始化指针变量是初学者最容易犯错误...未初始化指针变量就是“野”指针,它指向是无效地址。 有些书上说:“如果指针变量不初始化,那么它可能指向内存中任何一个存储单元,这样就会很危险。...空指针不应与未初始化指针混淆:保证空指针与指向有效对象任何指针进行比较。但是,根据语言和实现,未初始化指针可能没有任何此类保证。它可能与其他有效指针相等; 或者它可能比较等于空指针

2.6K20

C++11 async那些奇怪问题

C++11标准增加async接口,便于异步执行任务,使用async会遇到两个奇怪问题: 第一, 为什么异步任务有时马上执行,有时很久才执行,甚至不执行。...第二, 日志如果有打印线程ID,会发现不同任务日志输出线程ID有时一样。...C++11async有两个版本: 版本1:future async(Function f, Args&&…args) 版本2:future async(launch policy, Function f...不同地方在于版本2多一个参数launch。 版本2launch参数有2个取值:launch::async 和 launch::deferred。...设置launch参数为launch::async,启动一个线程来执行任务,该线程可能是线程池某个线程,它执行完任务后会执行下一个任务,于是不同任务日志输出线程ID可能会一样。

97040

c专题指针-----数组与指针关联

(譬如int a, b, c, d;)和一次定义一个数组(int a[4]);这两种定义方法相同点是都定义了4个int型变量,而且这4个变量都是独立单个使用;不同点是单独定义时a、b、c、d在内存中地址不一定相连...a做左值时表示整个数组所有空间(10×4=40字节),又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值;a做右值表示数组首元素(数组第1个元素,也就是a[0])首地址(...c):&a就是数组名a取地址,字面意思来看就应该是数组地址。&a不能做左值(&a实质是一个常量,不是变量因此不能赋值,所以自然不能做左值。)...三、指针、数组与sizeof运算符 1、sizeof错误纠正: sizeof是C语言一个运算符(主要sizeof不是函数,虽然用法很像函数),sizeof作用是用来返回()里面的变量或者数据类型占用内存字节数...(3):strlen是一个C库函数,用来返回一个字符串长度(注意,字符串长度是不计算字符串末尾'\0')。一定要注意strlen接收参数必须是一个字符串(字符串特征是以'\0'结尾) 。

1K10

C语言函数传参:指针指针

这是道哥第013篇原创 前言 今天同事问了一个问题:在函数参数中传递指针指针,很常用一个场景,重新梳理一下记录于此,以后如果有类似的问题直接发这篇小总结就可以了。...,然后返回给main函数中pData指针。...到这里就已经看到程序崩溃原因了:虽然给指针p赋值了,但是实参pData中内容一直为空,因此从do_malloc函数返回之后,pData仍然是一个空指针,所以就崩溃了。...在do_malloc函数中,调用系统函数malloc成功之后返回所分配空间首地址,关键是要把这个首地址送给pData指针,也就是说要让pData指针变量中值等于这个堆空间首地址。...执行do_malloc(&pData, 128); 把pData指针地址作为实参进行传递,因为pData本身就是一个指针,加上取地址符&,就是指针指针(二级指针),因此do_malloc函数第一个参数就要定义成

2.1K20

C语言】指针进阶:字符指针&&数组指针&&函数指针

✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 ---- 感谢您点赞与关注,同时欢迎各位有空来访我平凡舍 --...指针大小是固定4/8个字节(32位平台/64位平台)。 指针是有类型,指针类型决定了指针±整数步长,指针解引用操作时候权限。 指针运算。...有了前面的一些指针基础之后呢,我们将从这篇博客开始,开始一起探究指针高级主题:指针进阶,将通过不止一篇博客讲完这部分内容,下面一起来看一看> ---- 字符指针指针类型中我们知道有一种指针类型为字符指针...其实很简单,这里str3和str4指向是一个同一个常量字符串。C/C++会把常量字符串存储到单独一个内存区域,当指针指向同一个字符串时候,他们实际会指向同一块内存。...这时候,你可能会问了,这个40是怎么根据上面算出来? 数组指针使用 那数组指针是怎么使用呢?既然数组指针指向是数组,那数组指针中存放应该是数组地址。

2.8K20

C++】C++ 类中 this 指针用法 ① ( C++ 类中 this 指针引入 | this 指针用法 | 代码示例 )

一、C++ 类中 this 指针 1、C++ 类中 this 指针引入 在 C++ 类中 , this 指针 是一个特殊指针 , 由系统自动生成 , 不需要手动声明定义 , 在类中每个 非静态成员函数...中 , 都可以调用 this 指针 ; this 指针 是指向 调用对象 自身 指针 , 也就是调用 该成员函数 实例对象 内存地址 ; 由于 this 指针只能在 非静态成员函数内部使用..., 因此 this 指针是类内部使用指针 , 使用 this 可以访问 实例对象 中 所有 公有 public / 保护 protected / 私有 private 成员 ; 2、C++ 类中...this 指针用法 C++ 类中 this 指针用法 : 使用 this 作为指针 : 在 非静态成员函数 中 , 直接使用 this 作为 本实例对象 指针 ; this 使用 this-> 访问成员变量...访问成员变量 : 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中 非静态成员变量 ; 先获取指针指向数据 然后访问数据中成员变量 ; (*this).成员变量名 在 C++

25520

C语言(失效指针

曾经以为,C语言对我来说已经深入骨髓,所有语法细节早已烂熟于胸,直到我遇到了一道笔试题,一道丧心病狂笔试题,才渐渐明白,图样!图森破!哎我还是太年轻。。。...原题代码复杂,记不住,但考核关键语法点嘴脸如下: // 失效指针 int main(void) { void (*p)(); // 定义了一个指针 int a = 100;...我们将源代码稍作修改: // 失效指针 int main(void) { void (*p)(); // 定义了一个指针 int a = 100; p = &a;...将代码再改一下: // 失效指针 int main(void) { void (*p)(); // 定义了一个指针 int a = 100; p = &a; //...让指针p指向了a printf("p: %#x\n", p); // 将指针p存储地址以十六进制输出 printf("*p: %#x\n", *p); // 将指针p目标

71120

C 指针算术运算

C 指针是一个用数值表示地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。...假设 ptr 是一个指向地址 1000 整型指针,是一个 32 位整数,让我们对该指针执行下列算术运算: ptr++ 在执行完上述运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次...我们概括一下: 指针每一次递增,它其实会指向下一个元素存储单元。 指针每一次递减,它都会指向前一个元素存储单元。...指针在递增和递减时跳跃字节数取决于指针所指向变量数据类型长度,比如 int 就是 4 个字节。...下面的程序修改了上面的实例,只要变量指针所指向地址小于或等于数组最后一个元素地址 &var[MAX - 1],则把变量指针进行递增: 实例 #include const int

59820

C语言: 指针进阶

目录 指针进阶 前言 1. 字符指针 2. 数组指针 3. 指针数组 4. 数组传参和指针传参 5. 函数指针 6. 函数指针数组 7. 指向函数指针数组指针 8....回调函数 ---- 指针进阶 前言 上文简易指针中我们介绍了一些常见简单指针用法 链接:简单指针 这期,咱们来学习进阶版指针用法。 1....而指针str3、指针str4则是指向同一块内存中存放字符串,所以他们是相同。 2. 数组指针 顾名思义,这是一种指针,并且是一种可以指向数组指针。 那么他是哪种形式呢?...看看以下例题分析:  一维数组: 当传入是数组名时候,函数参数无论是数组、指针、还是指针 [ ] 都是可以 当传入指针数组数组名,那么这时候就要用到二级指针了,指向指针地址了。...因为他性质是一个数组,所以名字是要和 [ ] 先结合。 7. 指向函数指针数组指针 最下面这一行就是指向函数指针数组指针。 怎么理解这一行呢?

59230

C语言指针(三)函数指针

函数指针 在我们定义函数时候,编译器也会在内存空间给函数开辟一个内存,而该内存首地址就是函数内存地址,而函数指针就是指向该内存地址。...3.1 函数 众所周知,C语言是面向过程语言,或者称函数式编程。 而在C语言中,函数也确实起了很大作用,在C语言学习中,你见过最多可能就是main函数,同时也是你第一个见得函数。...; return 是函数结束关键字,返回值为0表示程序正确运行,为其他表示有其他异常 切记main函数不要void main(){},这个真的很重要 ❞ 3.2 指向函数指针 见名知意,这个东西也是一个指针...,只不过他指向是一个函数,准确来说是函数在内存空间中开辟空间头地址。...funP int ans = funP(1, 2); // 使用指针使用函数 printf("%d", ans); return 0; }

2K00

C语言灵魂——指针

你需要了解函数、循环、数组等C语言知识 ---- C语言灵魂——指针 1.指针基本介绍 ---- 计算机每一个字节都有一个地址。...3] = 'B'; printf("%s\n", c); return 0; } 我们发现字母后面出现了几个乱码,这是因为我们破坏了printf默认规则,也就是字符串必须是以null结尾吧,这就是发生未定义行为原因...char c[5] = {'A','B','C','D','\0'}; 引入指针 声明一个字符数组和一个字符指针。...char c1[5] = "hello";char* c2; 我们使用这个数组名字和这个字符指针名字放到等式中是成立。...= '\0') { printf("%c", *c); c++; } } 解释:此时字符数组就是一个指针,存就是元素地址,从首元素开始只要不是null就进入循环,然后元素地址进行自增,

87310
领券