typedef struct stack{
int size;
int array[30];
}STACK;
int p;
STACK *W;
Run Code Online (Sandbox Code Playgroud)
(*W).array和之间有什么区别 (*W).array[0]?
如果我有W和p?如何获得指向数组中第一个元素的int指针?
在我班上的讲义中,有一个功能
Obj3D * findObject (int objID) {
Obj3D *pObj = ...
if (pObj == 0) {
throw BadObjectID (objID);
return pObj;
Run Code Online (Sandbox Code Playgroud)
为什么函数返回指向对象的指针,但函数的返回类型是一个对象?
我有一个带有std ::指针映射的结构体.我正在尝试执行以下操作:
template <class T>
struct Foo
{
std::map<std::string, T*> f;
T& operator[](std::string s)
{
return *f[s];
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
Foo<Bar> f;
f["key"] = new Bar();
Run Code Online (Sandbox Code Playgroud)
但它写的方式,它崩溃了程序.我也尝试过这样:
T* operator[](std::string s)
{
return f[s];
}
Run Code Online (Sandbox Code Playgroud)
但它没有编译.它说"lvalue required as left operand of assignment"就f["key"] = new Bar()行了.
我希望它很容易,因为我正在尝试返回一个指针而我正在存储一个指针.我的代码出了什么问题?
所以说我有一个对象/指针/无论这个东西的定义是什么:
A* a = new A();
Run Code Online (Sandbox Code Playgroud)
碰巧有方法
b();
c();
Run Code Online (Sandbox Code Playgroud)
我发现的做事方式是这样的:
a->b();
Run Code Online (Sandbox Code Playgroud)
这个方法运作得很好.但是现在我看到有人这样做:
(*a).b();
Run Code Online (Sandbox Code Playgroud)
问题是:这两种调用方法的方法之间有什么区别(即每个方法管理的地址和值如何),根据这种方式,最好使用哪种方法?
如果这是其他问题的副本,请告诉我,我会在看到原始问题后将其删除.
我试图定义一个包含节点*next的节点结构.我编写了一个append(node* n?函数来在前一个节点旁边添加一个新节点,但是每次运行代码时,它都会给我一个seg错误.我的代码如下:
#include<stdlib.h>
#include<stdio.h>
typedef struct _log_t {
struct _log_t* next;
}log_t;
void initi(log_t* l) {
l = (log_t*)malloc(sizeof(log_t));
l -> next = NULL;
}
void append(log_t* l){
l->next = (log_t*)malloc(sizeof(log_t));
l->next->next = NULL;
l = l->next;
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
在C中声明一个字符串时有什么区别
char* mystring;
Run Code Online (Sandbox Code Playgroud)
和
char *mystring;
Run Code Online (Sandbox Code Playgroud) 我试图将存储分配给结构指针.这是代码 - 你能告诉我我做错了什么吗?
can.h对应
#ifndef CAN_H_
#define CAN_H_
typedef struct {
u32 id;
u32 mask;
char length;
char data[8];
char status;
} CAN_PACKET;
Run Code Online (Sandbox Code Playgroud)
project.c
#include "can.h"
CAN_PACKET *packet_Tx, *packet_Rx;
CAN_PACKET packet1, packet2;
packet_Tx = (CAN_PACKET*)malloc(sizeof(CAN_PACKET)); /* line 20 in text */
packet_Tx = &packet1; packet_Rx = &packet2;
int main(void)
{
while(1)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我收到这些错误/警告:
警告1数据定义没有类型或存储类c:\ users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5
警告2类型在'packet_Tx'的声明中默认为'int'c:\ users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5
错误3'packet_Tx'c的冲突类型:\ users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5
错误4先前'packet_Tx'的声明在这里c:\ users\blu\documents\avrstudio\Can5\Can5\Can5.c 18 13 Can5
警告5初始化从指针生成整数而没有强制转换c:\ users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 14 Can5 …
我在c中的指针和结构有点问题.
struct foo{
char a[15];
}
void asn_foo(struct foo *pa){
(*pa).a = "123";
}
main()
{
struct foo foo1[2], *pf;
pf = &(foo1[0]);
asn_foo(pf);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试通过以下方式分配新值:
(*pa).a = "123";
Run Code Online (Sandbox Code Playgroud)
但是我在这一行上有错误"赋值不兼容".我究竟做错了什么?
可能重复:
左值必需错误
我的C程序出错了
main () {
int arr[] = {1, 2, 3, 4};
printf("%d", *arr);
arr++;
printf("%d", *arr);
}
Run Code Online (Sandbox Code Playgroud)
当我编译这段代码时,我得到左值所需的错误.对于带有arr ++的行.任何帮助!
这不是一个实际问题,但它只是为了教育好奇心.
在一些论坛中,我刚刚发现了这段代码:
std::vector<MyClass*> myvec;
for(unsigned int i = 0; i < 100; ++i) {
myvec.push_back(new MyClass( foo1 ));
}
// somewhere in the code inside a particular if statement
MyClass* replacement = new MyClass( foo2 );
delete myvec[0];
myvec[0] = replacement;
Run Code Online (Sandbox Code Playgroud)
我有一个MyClass实例的向量,在代码中的某处我必须用其他实例替换某些实例.
为什么我要拨打删除?更换指针不够吗?