Tag: 指针

在C ++中通过引用传递指针是否有好处?

在C ++中通过引用传递指针有什么好处? 最近,我已经看到了许多select通过指针传递函数参数而不是通过引用传递的例子。 这样做有好处吗? 例: func(SPRITE *x); 随叫随到 func(&mySprite); 与 func(SPRITE &x); 随叫随到 func(mySprite);

在指针声明中放置星号

我最近决定,我不得不最终学习C / C ++,有一点我不太了解指针,或者更确切地说,他们的定义。 这些例子如何: int* test; int *test; int * test; int* test,test2; int *test,test2; int * test,test2; 现在,据我了解,前三种情况都是一样的:testing不是一个int,而是一个指针。 第二套例子有点棘手。 在情况4中,test和test2都是指向int的指针,而在情况5中,只有test是一个指针,而test2是一个“真实的”int。 那么情况6呢? 与案例5一样?

char数组与char中的C指针

我想了解C中的指针,但我目前与以下内容混淆: char *p = "hello" 这是一个字符指针,指向字符数组,从h开始。 char p[] = "hello" 这是一个存储hello的数组。 将这两个variables传递给这个函数有什么区别? void printSomething(char *p) { printf("p: %s",p); } 我不明白他们有什么不同。

数组不会衰减到指针的例外?

我曾在很多post中看到“在大多数情况下,数组名称衰变为指针”。 我可以知道在什么情况下/expression式数组名不会衰减到第一个元素的指针?

在C中,是数组指针还是用作指针?

我的理解是,数组只是指向一系列值的常量指针,并且当您在C中声明一个数组时,您声明了一个指针并为它指向的序列分配空间。 但是这使我困惑:下面的代码: char y[20]; char *z = y; printf("y size is %lu\n", sizeof(y)); printf("y is %p\n", y); printf("z size is %lu\n", sizeof(z)); printf("z is %p\n", z); 当与苹果GCC编译给出以下结果: y size is 20 y is 0x7fff5fbff930 z size is 8 z is 0x7fff5fbff930 (我的机器是64位,指针是8个字节长)。 如果'y'是一个常量指针,为什么它的大小是20,就像它指向的值序列一样? 在编译期间,variables名称“y”是否由内存地址replace? 那么,数组中的某种语法糖就是刚刚被编译时转换为指针的东西?

为什么使用双指针? 或者为什么使用指针指针?

什么时候应该在C中使用双指针? 任何人都可以用一个例子解释? 我所知道的是一个双指针是一个指针的指针。 为什么我需要一个指针指针?

我怎样才能从C中的指针获取数组的大小?

我已经分配了一个大小为n的mystruct的“数组”: if (NULL == (p = calloc(sizeof(struct mystruct) * n,1))) { /* handle error */ } 之后,我只能访问p ,不再有n 。 有没有一种方法来确定只给了指针p数组的长度? 我认为这一定是可能的,因为free(p)就是这样做的。 我知道malloc()跟踪它已经分配了多less内存,这就是为什么它知道长度; 也许有一种方法来查询这些信息? 就像是… int length = askMallocLibraryHowMuchMemoryWasAlloced(p) / sizeof(mystruct) 我知道我应该修改代码,以便知道n ,但是如果可能,我宁愿不要。 有任何想法吗?

有指向不同types的指针有不同大小的平台吗?

C标准允许指向不同types的指针具有不同的大小,例如sizeof(char*) != sizeof(int*)是允许的。 但是,它要求如果一个指针被转换为一个void*然后转换回原来的types,它必须与原始值相等。 因此,从逻辑sizeof(void*) >= sizeof(T*) ,所有typesT sizeof(void*) >= sizeof(T*)是正确的? 在当今使用的大多数通用平台(x86,PPC,ARM和64位变体等)中,所有指针的大小等于本地寄存器大小(4或8字节),而不pipe指向的types如何。 是否有任何深奥或embedded式平台指向不同types的指针可能有不同的大小? 我具体询问数据指针,虽然我也有兴趣知道是否有平台的function指针具有不寻常的大小。 我绝对不是在问C ++的指针成员和指向成员函数。 这些在普通平台上采用不寻常的大小,甚至可以在一个平台内变化,取决于指针类(非多态,单inheritance,多inheritance,虚inheritance或不完全types)的属性。

函数不会改变传递的指针C ++

我有我的function,我在那里填充targetBubble ,但调用这个函数后没有填充,但我知道它填写了这个函数,因为我有那里的输出代码。 bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) { targetBubble = bubbles[i]; } 而我正在像这样传递指针 Bubble * targetBubble = NULL; clickOnBubble(mousePos, bubbles, targetBubble); 为什么它不工作? 谢谢

为什么将“pointer to pointer to non-const”转换为“指向const的指针”是不合法的,

将指向非const的指针转换成指向const的指针是合法的。 那么为什么把一个指针指向非const的指针转换为指向const的指针是不合法的呢? 例如,为什么下面的代码是非法的: char *s1 = 0; const char *s2 = s1; // OK… char *a[MAX]; // aka char ** const char **ps = a; // error!