相关疑难解决方法(0)

传递参考与传递值之间有什么区别?

有什么区别

  1. 通过引用传递的参数
  2. 一个由值传递的参数?

你能给我一些例子吗?

language-agnostic pass-by-reference pass-by-value

539
推荐指数
11
解决办法
65万
查看次数

通过C++标准的下标:legal来获取一个过去的数组元素的地址?

我已经看过它多次断言现在C++标准不允许使用以下代码:

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];
Run Code Online (Sandbox Code Playgroud)

&array[5]在这种情况下是合法的C++代码吗?

如果可能的话,我想要一个参考标准的答案.

知道它是否符合C标准也很有趣.如果它不是标准的C++,为什么决定做出从不同的治疗呢array + 5还是&array[4] + 1

c c++ standards language-lawyer

75
推荐指数
6
解决办法
6741
查看次数

如何解除引用函数指针?

为什么以及如何解除引用函数指针只是"什么都不做"?

这就是我所说的:

#include<stdio.h>

void hello() { printf("hello"); }

int main(void) { 
    (*****hello)(); 
}
Run Code Online (Sandbox Code Playgroud)

来自这里的评论:

函数指针解除引用就好了,但生成的函数指示符会立即转换回函数指针


这里的答案:

解除引用(以你认为的方式)函数的指针意味着:访问CODE内存,因为它将是一个DATA内存.

不应该以这种方式取消引用函数指针.相反,它被称为.

我会使用"dereference"这个名字与"call"并排使用.没关系.

无论如何:C的设计方式是函数名称标识符和变量保持函数的指针都是相同的:地址到CODE内存.它允许通过在标识符或变量上使用call()语法来跳转到该内存.


如何准确地不提领一个函数指针的工作?

c c++ pointers function-pointers

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

"引用"和"解除引用"的含义

我在互联网上阅读不同的东西并感到困惑,因为每个网站都说不同的东西.

谈到C.

我读到了*引用运算符&和解引用运算符; 或者引用意味着使指针指向变量,并且解除引用正在访问指针指向的变量的值.所以我很困惑.

我是否可以获得有关"引用和取消引用"的简单但彻底的解释?

c pointers reference dereference

56
推荐指数
5
解决办法
10万
查看次数

0xC0000005:访问冲突读取位置0x00000000

对于我正在研究的太空入侵者游戏,我遇到了一个非常奇怪的问题.基本上我收到访问冲突错误:

SpaceInvaders.exe中0x5edad442(msvcr100d.dll)的未处理异常:0xC0000005:访问冲突读取位置0x00000000.

当我在下面包含这段代码时.visual studio在调试时带我去"strcmp.asm".请注意,我没有在任何代码中使用strcmp().代码有什么问题,或者这个问题是否超出了我所包含的范围?谢谢你的帮助

const char* invarray[] = {"invader0.png", "invader1.png", "invader2.png", "invader3.png", "invader4.png"}; 
int i=0;
//Creates 55 invaders
for (int y=0; y<250; y+=50){
    for (int x=0; x<550;x+=50){
        Invader inv(invarray[y/50], x+50, y+550, 15, 15, 1, false, 250);
        invaders[i] = inv;
    }
}
Run Code Online (Sandbox Code Playgroud)

Invader构造函数:

Invader::Invader(const char *pic, int x, int y, int w, int h, bool dir, bool des, int point) : MovingObject(pic, x, y, w, h) , direction(dir), destroyed(des), b(0), points(point){};
Run Code Online (Sandbox Code Playgroud)

MovingObject构造函数

MovingObject::MovingObject(const char *pic, int x, int y, int w, …
Run Code Online (Sandbox Code Playgroud)

c++ access-violation

18
推荐指数
3
解决办法
10万
查看次数

指针和指针变量之间有什么区别?

我知道这是非常基本的,但对我来说有点混乱.
我读了:

一个指针只不过是一个多地址,并且指针变量只是可变量存储地址.
当我们将变量的地址存储i在指针变量中时p,我们说它p 指向 i.

int i, *p = &i;
Run Code Online (Sandbox Code Playgroud)

p指向i.

为了访问指针指向的对象,我们使用*(间接)运算符.

如果p 是指针*p表示p当前指向的对象.

现在我很困惑,我应该调用什么p- 指针指针变量

附加:指针是否始终与地址相同?

c function-pointers

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

C指针的"**&ptr"和"2**ptr"是什么意思?

我是C的新手.我需要通过以下代码了解屏幕上打印的每个值的含义:

#include<stdio.h>

int main() 
{
     int x = 10;
     int *ptr = &x;
     printf("%d %d %d\n", *ptr,**&ptr, 2**ptr);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(GCC):

10 10 20
Run Code Online (Sandbox Code Playgroud)

在这里,我声明了变量xptr指向x变量.所以,*ptr印刷价值x.但我不明白的价值**&ptr2**ptr.

提前致谢.

c pointers reference dereference

8
推荐指数
2
解决办法
1723
查看次数

增加指针

我有一个关于增加指针的问题,我不太明白.

让我们看看2个小程序:

int iTuna=1;
int* pPointer= &iTuna;
*pPointer = *pPointer + 1 ; //Increment what pPointer is pointing to.
cout << iTuna << endl;
Run Code Online (Sandbox Code Playgroud)

在第一个程序中,我将pPointer指向的内容增加为"*pPointer =*pPointer +1".正如我所料,iTuna改为"2"并且程序打印出值"2"

int iTuna=1;
int* pPointer= &iTuna;
*pPointer++; //Increment what pPointer is pointing to.
cout << iTuna << endl;
system("PAUSE");
return 0;
Run Code Online (Sandbox Code Playgroud)

在这里,我增加了pPointer指向的增量,这是"*pPointer ++".但是这里iTuna保持为"1"并且程序打印出值"1".虽然我期望这个作为第一个工作,但事实并非如此.

请帮助我,告诉我为什么第二代代码没有像我预期的那样工作以及如何绕过它.

谢谢

c++ pointers increment

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

如何指向字符数组的行为?

我有以下代码片段来理解指针到特定长度的字符数组的工作,使用以下示例代码.

#include <stdio.h>
int main(){

    char sports[5][15] = {

            "cricket",
            "football",
            "hockey",
            "basketball"
    };

    char (*sptr)[15] = sports;

    if ( sptr+1 == sptr[1]){

        printf("oh no! what is this");
    }

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

如何sptr+1sptr[1]可以相等?因为第一个意味着增加地址,它sptr由一个存储,第二个意味着获取存储在其中的地址的值sptr + 1.

c pointers multidimensional-array

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

如何将包含指针的OpenCV-C++代码翻译成JAVA?

我目前正在将一些c ++代码翻译成Java,用于Android应用程序.我偶然发现了一些棘手的c ++代码(c ++也不是我的主要语言).下面是c ++代码.此函数计算openCV图像帧中的图像渐变(灰度).

cv::Mat computeMatXGradient(const cv::Mat &mat) {
  cv::Mat out(mat.rows,mat.cols,CV_64F);

  for (int y = 0; y < mat.rows; ++y) {
    const uchar *Mr = mat.ptr<uchar>(y);
    double *Or = out.ptr<double>(y);

    Or[0] = Mr[1] - Mr[0];
    for (int x = 1; x < mat.cols - 1; ++x) {
      Or[x] = (Mr[x+1] - Mr[x-1])/2.0;
    }
    Or[mat.cols-1] = Mr[mat.cols-1] - Mr[mat.cols-2];
  }
}
Run Code Online (Sandbox Code Playgroud)

在这个片段中,我不知道如何解释第一个循环中的前两行:

    const uchar *Mr = mat.ptr<uchar>(y);
    double *Or = out.ptr<double>(y);
Run Code Online (Sandbox Code Playgroud)

这里做了什么,我怎么能把它翻译成Java代码?我查看了'mat.ptr <>()'函数,但这也没有用.(文档可以在这里找到.)关于指针的基本信息(比如这里)我已经读过了,但我仍然没有得到如何阅读上面的行.除了使用的指针,我也不太确定如何处理正在使用的'uchar'类型.这如何转化为Java?

整个代码可以在这里找到. …

c++ java android opencv

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