当前位置:当前位置:首页 >人工智能 >EasyC++,C++指针初探 正文

EasyC++,C++指针初探

[人工智能] 时间:2025-11-05 13:53:29 来源:益强IT技术网 作者:IT科技类资讯 点击:15次

大家好,指针我是初探梁唐。

这是指针EasyC++系列的第15篇,咱们来聊聊C++中的初探指针。

想要追求更好阅读体验的指针同学,可以点击文末的初探「阅读原文」,访问github仓库。指针

指针初探

前言

C++可以说是初探成也指针、败也指针。指针依靠着指针,初探我们可以灵活地操控变量内存地址,指针实现很多独有的初探功能。但也正因为指针,指针尤其是初探使用不当的时候会产生许多的问题。导致许多工程师对于C++以及指针深恶痛绝,指针以至于C++之后的许多语言都摒弃了指针的设计,比如Java和Python。

我们先把头疼的内容放一放,先从一些简单的概念开始。云服务器

首先要明确的是指针是一个变量,它特殊的点在于虽然同样是变量,它存储的并不是值,而是一个内存地址。内存地址顾名思义就是存放在内存当中的位置,对于非指针的变量, 我们也可以使用&操作符去获取它的地址。这就是为什么我们使用scanf在读取变量的时候,需要在变量名之前加上一个&符号。

int a; scanf("%d", &a); 

目的就是为了将a变量的地址传给scanf函数,从而将屏幕当中读取到的内容填写到a变量对应的地址当中。

我们也可以直接输出一个变量的地址,但输出结果是免费信息发布网一个十六进制的数,代表一个内存位置。如果大家学过汇编或者是了解过底层的话,应该不陌生。这个输出的结果是给机器看的,人类无法读懂。

int a; cout << &a << endl; 

声明和初始化

指针和普通变量不同,它存储的值是地址。所以在声明指针的时候,也会有一点细小的区别。我们通过*符号创建指针,*运算符称为间接值(indirect value)或解除引用(dereferencing),现在理解这两个概念可能有些费劲,没关系我们可以先放一放。只许看记住使用*创建指针即可,*写在类型和变量名中间,如:

int * p; 

这样我们就创建了一个int型的指针,它的名字叫做p。关于*的位置,有些人喜欢紧跟着变量类型,WordPress模板有些人喜欢紧跟着变量名。其实都可以,看个人喜好。传统上来说C程序员喜欢后者,突出ptr是一个指针。

int *ptr; 

C++程序员更喜欢前者,突出是一个int型的指针:

int* ptr; 

这两种都可以,对于编译器来说没有任何区别。但是要注意的是,每一个指针变量都需要一个*:

int a, *ptr; 

前面说了,由于指针的值是一个地址,所以我们在对指针进行初始化或者赋值的时候,就需要用到取地址符。

int a = 3; int *p = &a; // 获取了a的地址 

当我们有了指针变量之后,我们可以使用*来访问它指向的内存地址的值。

int a = 3; int *p = &a; cout << *p << endl; //output: 3 

要注意的是,由于指针p指向a的地址,所以当我们通过*符号修改了p指向的值之后,a的值一样会发生变化。

*p = 5; cout << a << endl; //output: 5 

 正因为指针有这样的特性,所以使用的时候千万小心……

本文转载自微信公众号「Coder梁」,可以通过以下二维码关注。转载本文请联系Coder梁公众号。

(责任编辑:域名)

    打开上网客户端、新立得,这些涉及到系统的都要输入密码,对于我们大多数人来说,用Linux无非是做桌面应用,对安全性没必要搞得跟服务器一些。解决办法一: 在启动时进入安全模式,这时是用root登录的,执行: chmod 740 /etc/sudoers 然后打开/etc/sudoers这个文件,把最后一行: %admin ALL=(ALL) 保存退出。 执行: reboot your ubuntu.OK! 解决方法二:Ubuntu默认不能直接用root帐户登录,必须从第一个创建的用户(既安装时创建的那个用户)通过su或sudo来获得root权限。在Ubuntu中对系统进行操作很多时候都要使用这个命令,由此可见对于新来说很有必要来认识这个命令。这或许不太方便,但这样增加了安全性,避免用户由于误操作而损坏系统。sudo补充:通常我们并不以root身份登录,但是当我们执行某些命令 (command)时需要用到root权限,我们通常都是用sudo command来执行command。由于使用Ubuntu,所以经常都都用sudo,而使用sudo时,又得输入密码,所以我就寻找sudo不输入密码的方法。前阵子google了一下,很容容易找到一个方法,但是对其不够理解,今天,仔细研究了一下/etc/sudoers这个文件,对于如何实现自己的需求就非常清楚了。网上说看到的资料往往写得不清楚,所以我根据自己的需求好好整理了一下。 假设我的用户名为jay(属于 admin组),使sudo不用密码的方法如下。 1. 假如想把admin组的用户都sudo不用密码那么可以将这一行换为:%admin ALL=(ALL) NOPASSWD: NOPASSWD ALL即可。 注意:我自己的一个配置没生效,找原因还找了阵子,写到这里吧。 我添加jay ALL = NOPASSWD: ALL这样一行;但是,jay执行sudo时还是需要输入密码,这是为什么? 原来是,我这一行在%admin ALL=(ALL) ALL组策略之前前,后面的组配置覆盖了前面的配置,而jay属于admin组,所以需要密码。 这时,只需要将%admin行用#注释掉即可。OK!然后立马就生效了,可能执行sudo时系统都会去读取/etc/sudoers的,所以立即就生效了。 另外,附带公司某服务器的一个/etc/sudoers配置: 复制代码代码如下: 通过修改/etc/sudoers 上面说的并不准确,要注意以下几点。 编辑/etc/sudoers文件使用“超级用户终端”,而不能使用普通的终端。“超级用户终端”启动通过右键“编辑菜单”命令添加。 编辑完之后使用wq!而不是wq退出电脑声卡和蓝牙连接教程(无线音频传输的便捷方式及操作步骤)
    相关内容
    精彩推荐
    热门点击
    友情链接