标签: pointers

C++链表帮助(指针)?

template <typename T>
class LinkedNode
{
public:
    T data;
    LinkedNode<T> *next;
    LinkedNode<T> *prev;
    LinkedNode<T>();
    LinkedNode<T>(T);
};

// Default constructor
template <typename T>
LinkedNode<T>::LinkedNode()
{
    next = NULL;
    prev = NULL;
}



template <typename T>
class LinkedList
{
private:
    LinkedNode<T> *head;
public:
    LinkedList<T>();
    ~LinkedList<T>();
    void addFront(T);
    void addBack(T);
    void addAt(T, int);
    void removeFront();
    void removeBack();
    void removeAt(int);
    void printList();
};

// Constructor
template <typename T>
LinkedList<T>::LinkedList()
{
    head = NULL;
}

// Add new node to front
template <typename T>
void …
Run Code Online (Sandbox Code Playgroud)

c++ pointers linked-list list

0
推荐指数
1
解决办法
924
查看次数

为什么函数调用后指针不为空?

我不经常使用C++,我现在遇到使用Microsoft C++指针的问题.
我已经定义了一个半边数据结构.代码示例显示了结构的一部分.

struct edge
{
    HalfEdge    *he1;   // pointer to right halfedge
    HalfEdge    *he2;   // pointer to left halfedge 
    Edge        *nexte; // pointer to next edge
    Edge        *preve; // pointer to previous edge
};

struct halfedge
{
    Edge        *edg;   // pointer to parent edge
    Vertex      *vtx;   // pointer to starting vertex 
    Loop        *wloop; // back pointer to loop
    HalfEdge    *nexthe;// pointer to next halfedge
    HalfEdge    *prevhe;// pointer to previous halfedge
};
Run Code Online (Sandbox Code Playgroud)

现在我已经将Edge的变量初始化为NULL.
我在方法中使用edge.

void CDataStructureBuilder::create4VertFace(Face* f,Vertex* v1,Vertex* v2, Vertex* …
Run Code Online (Sandbox Code Playgroud)

c++ pointers

0
推荐指数
1
解决办法
435
查看次数

当您处理C和其他具有指针的语言时,初始化指针会自动将其设置为null吗?

假设您已经定义了一个(全局或局部)指针变量,例如:

    void *this_is_a_pointer;
Run Code Online (Sandbox Code Playgroud)

没有给它值"= NULL;"

这会自动给你一个NULL ptr(一个指向NULL的指针)吗?

*另外,空指针指向NULL意味着什么?这是说它可以指向字面上的任何地方吗?(基本上,什么是" NULL的地址位置"?)

c pointers

0
推荐指数
1
解决办法
128
查看次数

有趣的strcmp实现失败.(C)

我正在开发一个小项目,我无法访问任何C标准库.(从头开始构建一个ARM结构的微内核.甚至必须实现printf)

在这种情况下,我使用Duff的机器方法实现了strcmp.

以下是整个代码.

int
strcmp ( const char *str1, const char *str2 )
{
   while ( *str1 || *str2 )
       if ( *(str1++) != *(str2++) ) return *str1 - *str2;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是有道理的; 有些时候它似乎适用于测试用例,直到最终系统发生故障.我追查到了这个strcmp.

起初我以为它首先递增str1然后比较str2 BEFORE str2递增.事实证明不是,但有人可以确认在某些情况下会发生这种情况吗?

然后我发现问题出现在*str1 - *str2中,所以将其更改为返回1.即,结果代码如下:

   while ( *str1 || *str2 )
       if ( *(str1++) != *(str2++) ) return 1;
   return 0;
Run Code Online (Sandbox Code Playgroud)

虽然我想要的只是一个'等于'检查,所以改成'1'没有问题,但我仍然想知道为什么原始代码失败了.2.有人可以提出关于它如何失败的建议吗?我宁愿希望strcmp遵循标准的C接口,它返回一个非零值,告诉更多关于str1和str2的信息.

测试用例是:

code_t // a function pointer type
program_find ( char *program )
{
if (strcmp( program, "exit" ) == …
Run Code Online (Sandbox Code Playgroud)

c pointers character c-strings strcmp

0
推荐指数
1
解决办法
2460
查看次数

初始化由指针传递的数组

该函数无法初始化数组,因为sizeof()返回的字节数int pointer 不是内存所指向的大小myArray.

 void assignArray(int *myArray)
 {
     for(int k = 0; k < sizeof(myArray); ++k)
     {
         myArray[k] = k;
     }
 }
Run Code Online (Sandbox Code Playgroud)

还有其他问题吗?

谢谢

c++ arrays pointers initialization function

0
推荐指数
1
解决办法
210
查看次数

C语言:当你取消引用"指向int的指针"时,应该返回什么?

假设你有:

    void *a = //some address;
    *((int **)(char*)a) = 5
Run Code Online (Sandbox Code Playgroud)

我不清楚第二行应该做什么...我知道'a'被转换为指向char的指针,然后最终被转换为指向int的指针,但它目前还不清楚是什么解除引用指向int实际指针的指针...

这将非常有帮助.谢谢

c pointers

0
推荐指数
1
解决办法
215
查看次数

带指针的C++动态二维数组(矩阵)

大家:

我创建了一个程序,能够创建矩阵,并在学校的课程上执行各种操作.它们要求我们使用适当的Matrix操作使操作员超载.

我正在努力完成以下功能:

typedef double matrixType;


using namespace std;


class Matrix{
protected:
    int m,n; // m:row size n:column size
    matrixType **a; //Allows us to acces the a(ij) i,j position of the matrix


//==================================================
// (==Operator)Verifies if two given Matrices are equal
//==================================================

bool Matrix::operator==(const Matrix &B){

bool flag=false;


if(B.m ==m && B.n ==n){

    for (int row=0; row<m; row++) {
        for (int col=0; col<n; col++) {
            if (B[row][col] != a[row][col]) {
                flag=false;
            }
        }
    }
    flag= true;
}

else{
    flag=false;

} …
Run Code Online (Sandbox Code Playgroud)

c++ pointers operator-overloading matrix

0
推荐指数
1
解决办法
1161
查看次数

确定回文 - 操作员*如何工作?

该程序应该采用三位数字并将其更改为回文.123会成为321.

逻辑是正确的,程序正确编译.:)然而,这些的逻辑并不容易.

我的教授用"堆栈图"解释了一些东西,我觉得它们很有帮助.我根据另一个程序创建了这个程序,因为我注意到了这与我制作不同程序之间的相似之处,但指向如何工作?

#include <stdio.h>

void reverse_number(int in_val, int *out_val) {
    int ones, tens, hundreds;

    ones = in_val % 10;
    tens = (in_val % 100 - ones) / 10;
    hundreds = (in_val - (ones + tens)) / 100;

    *out_val = (ones * 100) + (tens * 10) + hundreds;
}

int main() {
    int in_val;
    int out_val;

    printf("Give a three digit num to reverse: \n");
    scanf("%d", &in_val);

    reverse_number(in_val, &out_val);
    printf("New number is: …
Run Code Online (Sandbox Code Playgroud)

c pointers palindrome

0
推荐指数
1
解决办法
195
查看次数

取消引用成员指针错误:不能用作成员指针

我有以下(截断的)类声明:

template <typename T>
class btree 
{
    public:

        btree(const btree<T>& original); //This is btree's copy constructor

    private:

        struct btree_node 
        {
            btree_node(const btree_node &other)
            {
                //This is node's copy constructor
            }
        }

        btree_node* headNode;
}
Run Code Online (Sandbox Code Playgroud)

并且btree的复制构造函数以这种方式实现:

template <typename T> 
btree<T>::btree(const btree<T>& original)
{
    headNode = new btree_node(original.*headNode);
}
Run Code Online (Sandbox Code Playgroud)

原始.*headNode应该返回original.headNode指向的btree_node,从而匹配btree_node的拷贝构造函数参数.

但是我收到以下错误:

错误:((B树*)此) - > B树:: headNode'不能用作部件指针,因为它是类型为"B树:: btree_node*"

我究竟做错了什么?

c++ pointers class dereference

0
推荐指数
2
解决办法
3664
查看次数

只打印一个指向所需长度的指针

我有这样的C函数..

func(uint8_t *key,uint8_t keylen) {

FILE *fk;
fk=fopen("akey","wb");
fwrite((char *)key,keylen,1,fk);

puts((char *)key); // for testing

fclose(fk);

sprintf(sstring,"... \"%s\" ... ",(char *)key);
        // ...other irrelevant stuff for here
system(sstring);


}
Run Code Online (Sandbox Code Playgroud)

我希望提供的键作为输入\"%s\"sprintf命令中标记的位置使用

输入:

  Key=qwerty
Run Code Online (Sandbox Code Playgroud)

输出:

 $cat akey
 qwerty
Run Code Online (Sandbox Code Playgroud)

和输出puts((char *)key)是 -

 qwerty?    

 // include newline character as well
Run Code Online (Sandbox Code Playgroud)

建议我这个,我尝试了这个(在代码中各自的位置),但得到 segmentation fault

    char *p;
    memcpy(p,(char *)key,keylen);
    puts((char *)p);
Run Code Online (Sandbox Code Playgroud)

c string pointers memcpy segmentation-fault

0
推荐指数
1
解决办法
195
查看次数