考虑以下代码:
#include <iostream>
using namespace std;
class Base
{
public:
int foo;
};
class Derived : public Base
{
public:
float bar;
};
int main()
{
Base** baseArr = new Base*[30];
for (int i=0; i<30; i++)
{
Derived* derived = new Derived();
derived-&g
恐怕我没有正确地理解操作符之间的优先级。以下程序的工作方式与预期不同:
#include<stdio.h>
int main(){
char a[] = "abc";
char *p;
int i;
p = a;
for(i = 0; i < 3; ++i) /* First case */
printf("%c\n", *p++);
printf("a = %s\n", a);
p = a;
for(i = 0; i &
我在书中有下一个例子。
const int** pp2;
int* p1;
const int n = 13;
pp2 = &p1; // not allowed, but suppose it were
*pp2 = &n; // valid, both const, but sets p1 to point at n
*p1 = 10; // valid, but changes const n
但是,如果pp2是指向常量的指针,那么表达式*pp2=&n如何有效呢?
你能告诉我读指针的最好方法吗?我知道指针应该从右到左读取,const限定符应该在右边。我的问题是,在读取指向指针的指针时,例如:
int i = 10;
int const *const p = &i;
int const *const *p2 = &p; //how should I read this ?
我是否应该读取p2有指向const指针的const指针
如果我只是指定p2指向一个const指针,为什么它会变成一个const指针呢?
我刚开始在C中使用指针,而我一直在做一些简单的事情。我想确保我正确地理解它。
假设我有这样的东西:
int *buff;
据我所知,
*buff refers to the value that buff is currently pointing to
&buff refers to the address
但我坚持的是:
"buff“指的是什么?它是否指向&buff在内存中的位置,即指向*buff值的位置?
非常感谢!:3
-jtsan
我正在学习韦斯·麦金尼的“数据分析的Python”。在某种程度上,他说:“在Python中赋值变量(或名称)时,在等于符号的右侧创建对对象的引用。实际上,考虑一个整数列表:
In [8]: a = [1, 2, 3]
In [9]: b = a
In [11]: a.append(4)
In [12]: b
产出将是:
Out[12]: [1, 2, 3, 4]
他的理由是:“在某些语言中,b的赋值会导致数据1、2、3被复制。在Python中,a和b实际上是指同一个对象,原始列表。”
我的问题是,为什么在以下情况下没有发生同样的情况:
In [8]: a = 5
In [9]: b = a
I
有人能在我接下来的程序中给我解释一点吗?我写的下面的程序是为了理解int * const *var是什么意思;
#include "iostream"
using namespace std ;
int main(){
int a = 2;
int * const x = &a;
int * const * p = &x;
cout << **p;
return 0;
}
这个程序的输出是2。
我的关注点是p是指向一个指向int的常量指针的指针,这就是我如何使用它的,但我一直在研究,要存储一个指针,你需要一个指针。那么这个程序是如何工
我编写了下面的程序来测试等于和Java的功能(根据文档Java是按值传递的),所以当我将对象a传递给方法时,我实际上是在传递堆值。如果我在方法中更改对象的引用,那又是什么呢?会发生什么呢?
package equalstest;
public class EqualsMethodTest {
public static void main(String[] args) {
EqualsMethodTest a = new EqualsMethodTest();
EqualsMethodTest b = new EqualsMethodTest();
我遇到了两个指针声明,我很难理解。我对优先规则的理解如下:
Operator Precedence Associativity
(), [ ] 1 Left to Right
*, identifier 2 Right to Left
Data type 3
但是,即使是这样,我似乎也不知道如何正确地评估以下示例:
第一个示例
float * (* (*ptr)(int))(double **,
我一直在通过查看其他代码来练习,但我不能理解以下概念:
int *ptr2int = &varInt;
int **ptr2ptr = &ptr2int;
int ***ptr2ptr2 = &ptr2ptr;
为什么第一个指针声明使用一个*,第二个使用两个,第三个使用三个?指针到底是如何工作的,它在做什么?
我正在创建一个函数来删除给定列表的最后一个节点(作为参数输入)。函数本身非常简单,如下所示。
function popBack(list) {
var current = list.head,
previous;
while (current.next) {
previous = current;
current = current.next;
}
// console.log(current);
// console.log(previous.next);
// current = null;
我正在尝试理解用于修改队列的C代码:
/*
* create or delete a queue
* PARAMETERS: QUEUE **qptr - space for, or pointer to, queue
* int flag - 1 for create, 0 for delete
* int size - max elements in queue
*/
void qManage(QUEUE **qptr, int flag, int size){
if(flag){
基本上我在想是不是像
f(const void* a){
// This is also what `(char**) a` would do behind the scenes
char** string_a_ptr {reinterpret_cast<char**>(const_cast<void*>(a))};
// ...
保留const限定符是可能的。
我的问题是在一个关于C++中的C数组的练习中提出的。由于C,我必须传递一个带有const void*参数的函数指针。在这种情况下,它是指向一个C-字符串数组。为了把它投到正确的类型,我必须把它扔
我将对此相当含糊,我很抱歉。这是家庭作业,我想学点东西,所以我不是真的想要答案,而是想要一个解释。问题是
What is the datatype of thisThing
这不是实际的代码,而是一个类似的示例
int* (*thisThing[])(int*, int*) = {someFunction1, someFunction2}
据我所知,thisThing的“数据类型”只是一个整数。然而,我从未见过函数返回类型被称为“数据类型”。这是有原因的吗?我知道在C中有指向函数的指针;这些指针与变量指针没有区别吗?任何解释都是非常感谢的!
在使用智能指针时,我对C++中指向指针的指针的行为感到困惑。
这似乎是非常违反直觉的行为。
#include <iostream>
#include <memory>
using namespace std;
int main() {
// compare the functionality of raw and smart pointers
int* pA = new int(1);
int* pB = new int(2);
shared_ptr<int> pAsmart(new int(1));
share
我以前在C语言课程中没有见过这个空白。
int *dev_c;
dev_c = &val;
printf("%p\n",dev_c); // val address
printf("%p\n",&dev_c); // get the address of dev_c
printf("%p\n",(void **)&dev_c);
(void **)是一种类型转换器吗?最后两行输出相同的结果。