标签: pointers

指向STL容器元素的指针

给定一个非连续的STL容器(您也可以考虑boost::unordered_mapboost::multi_index_container考虑),如果没有删除任何元素,是否保证容器内元素的内存地址永远不会改变(但是可以添加新的容器)?

例如

class ABC { };
//
//...
//
std::list<ABC> abclist;
ABC abc;
abclist.insert(abc);
ABC * abc_ptr = &(*abclist.begin());
Run Code Online (Sandbox Code Playgroud)

在其他的字将abc_ptr被指出abc在整个执行,如果我不删除abcabc_list.

我问这个是因为我要用ABCC++/Cli ABC包装类,所以我需要指向包装类中的实例的指针.ABC是一个简单的类,我希望容器处理内存.如果答案是否定的话我将使用std::list<ABC*>.

c++ pointers stl memory-address

20
推荐指数
3
解决办法
8490
查看次数

使用指向char数组的指针,可以访问该数组中的值?

我创建了ptr作为指向5个字符数组的指针.

char (*ptr)[5];
Run Code Online (Sandbox Code Playgroud)

为它指定了一个char数组的地址.

char arr[5] = {'a','b','c','d','e'};
ptr = &arr;
Run Code Online (Sandbox Code Playgroud)

使用指针ptr可以访问此数组中的char值吗?

printf("\nvalue:%c", *(ptr+0));
Run Code Online (Sandbox Code Playgroud)

它不打印该值.

在我的理解中,ptr将包含数组的基址,但它实际上指向完整数组所需的内存(即5个字符).因此,当ptr递增时,它会向前移动sizeof(char)*5字节.那么使用这个指向数组的指针是不是可以访问数组的值?

c pointers

20
推荐指数
2
解决办法
10万
查看次数

显示字符串的地址

我有这个代码:

char* hello = "Hello World";
std::cout << "Pointer value = " << hello << std::endl;
std::cout << "Pointer address = " << &hello << std::endl;
Run Code Online (Sandbox Code Playgroud)

这是结果:

Pointer value = Hello World
Pointer address = 0012FF74
Run Code Online (Sandbox Code Playgroud)

当我使用OllyDbg调试我的程序时,我看到0x0012FF74的值是例如0x00412374.

有什么方法可以打印hello指向的实际地址吗?

c++ pointers

20
推荐指数
2
解决办法
3万
查看次数

将结构指针传递给c中的函数

我将指向结构的指针传递给函数时遇到了问题.我的代码基本上如下所示.在main函数中调用modify_item后,stuff == NULL.我想要东西是一个指向项目结构的指针,元素等于5.我做错了什么?

void modify_item(struct item *s){
   struct item *retVal = malloc(sizeof(struct item));
   retVal->element = 5;
   s = retVal;
}

int main(){
   struct item *stuff = NULL;
   modify_item(stuff); //After this call, stuff == NULL, why?
}
Run Code Online (Sandbox Code Playgroud)

c struct pointers

20
推荐指数
2
解决办法
5万
查看次数

指针上的golang指针作为函数参数

我有以下功能:

func addCatsToMap(m map[string][]CatHouse, meowId int, treats Set, dog *Dog) {

//if (complicated thing) add Cat to m

}
Run Code Online (Sandbox Code Playgroud)

其中Set,type的类型treats是具有以下定义的接口:

type Set interface {
  Add(value string)
  Contains(value string) (bool)
  Length() (int)
  RemoveDuplicates()
}
Run Code Online (Sandbox Code Playgroud)

题:

这是真的m,treatsdog通过按引用,并且meowId有它的价值被复制?

我认为:

  • m 是传递参考,因为它是一张地图
  • dog是一个结构.所以,我应该传递指针以避免复制数据

pointers go

20
推荐指数
2
解决办法
2万
查看次数

%p说明符仅用于有效指针吗?

假设在我的平台上sizeof(int)==sizeof(void*),我有这个代码:

printf( "%p", rand() );
Run Code Online (Sandbox Code Playgroud)

这是不确定的行为,因为传递一个不是有效指针的值代替%p

c++ pointers reinterpret-cast

20
推荐指数
3
解决办法
855
查看次数

为什么我要使用引用变量?

作为我的第一门编程语言,我学习了Java,但是由于我改为另一所大学,我现在正在学习C++.

来自Java并学习C++的基础知识,我阅读了有关引用和引用变量的内容.它们有多危险,如何小心它们等等.

因此,在我脑海中出现了一个简单的问题:为什么我要使用那种复杂的,因此可能引起问题的东西呢?

它是不是值得,或者只是RAM大约64MB的时候的遗物?

由于很多答案都提到了指针:这个概念显然来自石器时代,imho.除了高性能计算,我甚至不会触及那些东西.

c++ pointers reference

20
推荐指数
5
解决办法
1万
查看次数

如何正确地将dlsym返回的指针分配给函数指针类型的变量?

我试图使用dlopen()dlsym()在我的代码,并编译它gcc.

这是第一个文件.

/* main.c */

#include <dlfcn.h>

int main()
{
    void *handle = dlopen("./foo.so", RTLD_NOW);

    if (handle) {
        void (*func)() = dlsym(handle, "func");
        func();
    }

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

这是第二个文件.

/* foo.c */

#include <stdio.h>

void func()
{
    printf("hello, world\n");
}
Run Code Online (Sandbox Code Playgroud)

这是我编译和运行代码的方法.

$ gcc -std=c99 -pedantic -Wall -Wextra -shared -fPIC -o foo.so foo.c
$ gcc -std=c99 -pedantic -Wall -Wextra -ldl -o main main.c
main.c: In function ‘main’:
main.c:10:26: warning: ISO C forbids initialization between function …
Run Code Online (Sandbox Code Playgroud)

c pointers dlopen dlsym

20
推荐指数
3
解决办法
5370
查看次数

如何让gcc警告undefined结构?

我有一个在.h中定义的结构

struct buf_stats {
   // ***
};
Run Code Online (Sandbox Code Playgroud)

然后在.c文件中

struct buf_stats *bs = malloc(sizeof(struct buf_states*)) ;
Run Code Online (Sandbox Code Playgroud)

哪里buf_states是拼写错误.

但gcc并没有警告我,虽然我用过 -Wall

这个错误/错字花了我3个小时才发现.

如何让gcc像这样警告未定义的结构?

c gcc pointers sizeof gcc-warning

20
推荐指数
2
解决办法
1413
查看次数

`auto pp`和`auto*ppp`有什么区别?

int foo = 11;
int *p = &foo;

auto pp = p;
auto *ppp = p;

cout << pp << endl;
cout << ppp << endl;
Run Code Online (Sandbox Code Playgroud)

这个程序会为pp和产生相同的输出ppp,但为什么呢?auto推断变量应该是int,所以我认为声明ppp是对的.但是pp并且ppp具有相同的价值......

输出:

0x61fefc
0x61fefc
Run Code Online (Sandbox Code Playgroud)

c++ pointers auto c++11

20
推荐指数
2
解决办法
1180
查看次数

标签 统计

pointers ×10

c++ ×5

c ×4

auto ×1

c++11 ×1

dlopen ×1

dlsym ×1

gcc ×1

gcc-warning ×1

go ×1

memory-address ×1

reference ×1

reinterpret-cast ×1

sizeof ×1

stl ×1

struct ×1