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++,我现在遇到使用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) 假设您已经定义了一个(全局或局部)指针变量,例如:
void *this_is_a_pointer;
Run Code Online (Sandbox Code Playgroud)
没有给它值"= NULL;"
这会自动给你一个NULL ptr(一个指向NULL的指针)吗?
*另外,空指针指向NULL意味着什么?这是说它可以指向字面上的任何地方吗?(基本上,什么是" NULL的地址位置"?)
我正在开发一个小项目,我无法访问任何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) 该函数无法初始化数组,因为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)
还有其他问题吗?
谢谢
假设你有:
void *a = //some address;
*((int **)(char*)a) = 5
Run Code Online (Sandbox Code Playgroud)
我不清楚第二行应该做什么...我知道'a'被转换为指向char的指针,然后最终被转换为指向int的指针,但它目前还不清楚是什么解除引用指向int实际指针的指针...
这将非常有帮助.谢谢
大家:
我创建了一个程序,能够创建矩阵,并在学校的课程上执行各种操作.它们要求我们使用适当的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) 该程序应该采用三位数字并将其更改为回文.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) 我有以下(截断的)类声明:
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函数..
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)