可能重复:
c ++警告:局部变量的地址
char* strdup(const char* s)
{
char dup[strlen(s)];
for (int i = 0; i<strlen(s); i++)
{
dup[i]=s[i];
}
return dup;
}
Run Code Online (Sandbox Code Playgroud)
该函数应该保存已向后读取的新数组和另一个插槽.当我编译它时,我收到错误"警告:返回本地变量'dup'的地址",当我运行程序时,它返回内存地址.
我有int foo,其中包含一个整数的地址.如何在一行中添加foo指向的整数?
解:
(*(int *)foo)+=1
Run Code Online (Sandbox Code Playgroud)
这就是我处理它的方式.
#include <stdlib.h>
int int_sorter( const void *first_arg, const void *second_arg )
{
int first = *(int*)first_arg;
int second = *(int*)second_arg;
if ( first < second )
{
return -1;
}
else if ( first == second )
{
return 0;
}
else
{
return 1;
}
}
int main()
{
int array[10];
int i;
/* fill array */
for ( i = 0; i < 10; ++i )
{
array[ i ] = 10 - i;
}
qsort( array, 10 …Run Code Online (Sandbox Code Playgroud) 我正在将我的代码从变量更改为指针,我遇到了一些麻烦.曾经使用过的地方(很大程度上缩写):
int best = 0;
int max = 10;
if (max > best) {
best = max;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用指针,以便我可以使用pass-by引用将其抽象为函数.
int *best;
*best = 0;
int max = 10;
if (max > *best) {
*best = max;
}
Run Code Online (Sandbox Code Playgroud)
我在线上遇到了分段错误(max > *best).你能告诉我哪里出错了吗?
我想完全反转C样式字符串(以null结尾),即包含空字符.
null字符应该是反向字符串中的第一个元素.
假设我们有一个具体的类A和一个抽象类B.
考虑一个具体的C,它继承自A和B,并实现B:
class C : public A, public B
{
/* implementation of B and specific stuff that belongs to C */
};
Run Code Online (Sandbox Code Playgroud)
现在我定义一个签名是什么的函数 void foo(B* b);
这是我的代码,我可以假设每个指向B的指针都是A和B.在foo的定义中,如何获得指向A的指针?一个讨厌但有效的技巧是将指针对齐,如下所示:
void foo(B* b)
{
A* a = reinterpret_cast<A*>(reinterpret_cast<char*>(b) - sizeof(A));
// now I can use all the stuff from A
}
Run Code Online (Sandbox Code Playgroud)
请记住,C没有超类型,实际上,有许多类似于C的类,只有A和B.可以自由地质疑我的逻辑和这个设计样本,但问题只是关于指针对齐.
假设我有一些typedef struct {int b;} some_t;指向a这种结构的指针.那为什么呢
(*a).b = 5;
Run Code Online (Sandbox Code Playgroud)
不一样的
some_t c = *a;
c.b = 5;
Run Code Online (Sandbox Code Playgroud)
?
char* cc = "Something string like";
char* ccn = new char[2];
ccn[0] = 'a';
ccn[1] = '\0';
cout << cc;
Run Code Online (Sandbox Code Playgroud)
第二个指针,为了防止内存泄漏,应该是delete[]'但是如何检测指针是否实际指向新的内存(如第一行中的那个)?第一个字符串在哪里创建?
我有一个指向结构的指针数组.我想将数组中的每个元素初始化为NULL.我将使用此数组来动态添加和删除条目,因此我希望能够针对NULL进行测试,以查看该索引是否为空.
我试着这样做:
struct mystructure *cxs[MAXNOCXS];
int cx_init(void)
{
int i = 0;
for (i=0; i<MAXNOCXS; i++)
cxs[i] == NULL;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是我的编译器告诉我:
error: statement with no effect
Run Code Online (Sandbox Code Playgroud)
指的是这条线 cxs[i] = NULL;
指针数组是否在C中自动初始化为NULL?如果不是我怎么能这样做?
A* a = new A(x,y);
set<A> aset;
aSet.insert(a);
Run Code Online (Sandbox Code Playgroud)
我这样做了 出了错误.我该如何解决?
谢谢!!!