标签: pointers

为什么默认情况下没有使用NULL初始化指针?

有人可以解释为什么指针没有初始化NULL
例:

  void test(){
     char *buf;
     if (!buf)
        // whatever
  }
Run Code Online (Sandbox Code Playgroud)

程序不会进入if,因为buf它不是null.

我想知道为什么,在什么情况下我们需要一个带垃圾的变量,特别是指针解决内存上的垃圾问题?

c++ memory pointers initialization

117
推荐指数
7
解决办法
7万
查看次数

指针表达式:*ptr ++,*++ ptr和++*ptr

最近我遇到了这个我自己无法理解的问题.

这三个表达式真正意味着什么?

*ptr++
*++ptr
++*ptr
Run Code Online (Sandbox Code Playgroud)

我试过里奇.但不幸的是,他无法按照他讲述的这三项行动.

我知道它们都是为了递增指针/指向的值而执行的.我还可以猜测可能有很多关于优先级和评估顺序的事情.就像一个指针首先递增指针然后取出指针的内容,一个简单地取出内容然后递增指针等等.正如你所看到的,我对他们的实际操作我没有清楚的理解,我想尽快明确.但是当我有机会将它们应用到程序中时,我真的迷失了.例如:

int main()
{
    const char *p = "Hello";
    while(*p++)
         printf("%c",*p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

给我这个输出:

ello
Run Code Online (Sandbox Code Playgroud)

但我的期望是它会印刷Hello.最后一个请求 - 请给出一些示例,说明每个表达式在给定的代码段中的工作原理.因为大多数时候只有一段理论飞过我的脑海.

c c++ pointers increment

117
推荐指数
4
解决办法
6万
查看次数

错误:此范围内未声明"NULL"

我在gcc 4.3上编译C++时收到此消息

error: ‘NULL’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

它出现并消失,我不知道为什么.为什么?

谢谢.

c++ null gcc pointers

116
推荐指数
4
解决办法
15万
查看次数

宣告指针; 类型和名称之间的空格左侧或右侧的星号?

可能的重复:
什么更有意义 - char*string或char*string? C++中的指针声明:星号的放置

我已经在很多代码中看到了这个的混合版本.(顺便说一下,这适用于C和C++.)人们似乎用两种方式之一来声明指针,我不知道哪一个是正确的,如果它甚至是重要的.

第一种方法是将星号放在类型名称旁边,如下所示:

someType* somePtr;
Run Code Online (Sandbox Code Playgroud)

第二种方法是将星号放在变量名称旁边,如下所示:

someType *somePtr;
Run Code Online (Sandbox Code Playgroud)

这已经让我疯了一段时间了.是否有任何标准方法来声明指针?甚至指针是如何声明的?我之前使用过两个声明,并且我知道编译器并不关心它是哪种方式.然而,事实上,我已经看到以两种不同的方式宣告指针,这让我相信它背后有一个原因.我很好奇,如果任何一种方法在某些方面更具可读性或逻辑性,那我就错过了.

c c++ pointers

116
推荐指数
5
解决办法
6万
查看次数

常量指针vs指向常量的指针

我想知道它们之间的区别

const int* ptr;
Run Code Online (Sandbox Code Playgroud)

int * const ptr; 
Run Code Online (Sandbox Code Playgroud)

以及它是如何工作的.

我很难理解或记住这一点.请帮忙.

c pointers const

116
推荐指数
6
解决办法
21万
查看次数

指针,智能指针或共享指针?

我正在使用普通指针编程,但我听说像Boost这样的库实现了智能指针.我还看到在Ogre3D渲染引擎中有一个深度使用共享指针.

三者之间究竟有什么区别,我应该坚持使用它们的类型吗?

c++ pointers

115
推荐指数
5
解决办法
11万
查看次数

`dword ptr'是什么意思?

有人能解释这意味着什么吗?(英特尔语法,x86,Windows)

and     dword ptr [ebp-4], 0
Run Code Online (Sandbox Code Playgroud)

x86 assembly pointers dword

111
推荐指数
3
解决办法
13万
查看次数

创建指向二维数组的指针

我需要一个指向静态二维数组的指针.这是怎么做到的?

static uint8_t l_matrix[10][20];

void test(){
   uint8_t **matrix_ptr = l_matrix; //wrong idea 
}
Run Code Online (Sandbox Code Playgroud)

我得到各种错误,如:

  • 警告:从不兼容的指针类型分配
  • 下标值既不是数组也不是指针
  • 错误:无效使用灵活的数组成员

c arrays pointers

110
推荐指数
5
解决办法
21万
查看次数

Python中的指针?

我知道Python没有指针,但有没有办法有这个收益率2,而不是

>>> a = 1
>>> b = a # modify this line somehow so that b "points to" a
>>> a = 2
>>> b
1
Run Code Online (Sandbox Code Playgroud)


这是一个例子:我希望form.data['field']form.field.value始终拥有相同的价值.这不是完全必要的,但我认为这会很好.


例如,在PHP中,我可以这样做:

<?php

class Form {
    public $data = [];
    public $fields;

    function __construct($fields) {
        $this->fields = $fields;
        foreach($this->fields as &$field) {
            $this->data[$field['id']] = &$field['value'];
        }
    }
}

$f = new Form([
    [
        'id' => 'fname',
        'value' => 'George'
    ],
    [
        'id' => 'lname',
        'value' => …
Run Code Online (Sandbox Code Playgroud)

python pointers

110
推荐指数
7
解决办法
26万
查看次数

是什么让指针的使用变得不可预测?

我正在学习指针,我的教授提供了这段代码作为例子:

//We cannot predict the behavior of this program!

#include <iostream>
using namespace std;

int main()
{
    char * s = "My String";
    char s2[] = {'a', 'b', 'c', '\0'};

    cout << s2 << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

他在评论中写道,我们无法预测该计划的行为.究竟是什么让它变得无法预测?我觉得它没有错.

c++ pointers

108
推荐指数
6
解决办法
6890
查看次数

标签 统计

pointers ×10

c++ ×6

c ×4

arrays ×1

assembly ×1

const ×1

dword ×1

gcc ×1

increment ×1

initialization ×1

memory ×1

null ×1

python ×1

x86 ×1