小编Ant*_*ndo的帖子

c ++如何获取指针数组的长度?

我无法找到指针数组的长度.比方说我有:

char array[40] = "hello"; // size 40
int length =  sizeof array / sizeof array[0]; // no problem returns 40
Run Code Online (Sandbox Code Playgroud)

//如何仅使用指向该数组中第一个元素的指针来获取数组的长度?

 char* pchar = array;
Run Code Online (Sandbox Code Playgroud)

//如果

std::strlen(pchar); // this returns the length of 5... i want length 40
Run Code Online (Sandbox Code Playgroud)

//如果

int count = 0;
while(true)
{
  if(*(pchar + count) == '\0') // returns 5...
    break;
   count++;
}
Run Code Online (Sandbox Code Playgroud)

如何从指向数组中第一个元素的指针返回长度40?
我发现我可以做到这一点.

int count = 0;
    while(true)
    {
      if(*(pchar + count) == '\0' && *(pchar + count + 1) != '\0') 
             break;

       count++; …
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers

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

删除一行中的多个指针.C++

这是删除所有指针还是只删除第一个指针p1?

delete p1,p2,p3,p4,p5;  
Run Code Online (Sandbox Code Playgroud)

c++ pointers comma-operator

12
推荐指数
1
解决办法
3565
查看次数

c ++位移一个浮点数

float length =  32.32f;
long  i = *(long*)&length ; // casting a float pointer to a long pointer...
i >>= 1; // right shift i but 1 ... or div by 2
length = *(float*)&i; // is this necessary?
Run Code Online (Sandbox Code Playgroud)

印刷长度给出:0.0

最终结果应为:16.16;

这个想法来自http://en.wikipedia.org/wiki/Fast_inverse_square_root.我试图理解代码的部分是一个浮点数被取出并在其上执行按位运算.我猜这一点是通过避免分支来提高性能?

上面的代码失败了.谁能告诉我我做错了什么?我的印象是它就像在long存储器中float操作它一样简单,这是错误的吗?

我找到了一些有趣的东西,如果我将代码更改为:

 float length =  32.32f;
 long  i = *(long*)&length ;
 i  = 0x5f3759df - ( i >> 1 ); 
 length = *(float*)&i;
Run Code Online (Sandbox Code Playgroud)

将此数字(0x5f3759df)添加到混音中.

打印出长度*100给出:17.0538 //近似16.16
尝试不同长度给出相同的结果.

例如:长度= 100; 结果是:10.3299 ?? //差不多......

c++ bit-shift

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

主要后的c ++类声明?

#include "stdafx.h"
using namespace System;

class Calculater; // how to tell the compiler that the class is down there? 

int main(array<System::String ^> ^args)
{
    ::Calculater *calculater = new Calculater();

    return 0;
}

class Calculater
{
public:
    Calculater()
    {
    }
    ~Calculater()
    {
    }

};
Run Code Online (Sandbox Code Playgroud)

我在主要之后声明了这个类,我怎么告诉编译器我的类是什么?我尝试过
Calculater类; 在主要之前但它不起作用.

c++ declaration

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

c ++ GetDIBits无效

首先我加载图像"cool.bmp"..加载很好.然后我调用函数"getPixArray"但它失败了.

  case WM_CREATE:// runs once on creation of window
            hBitmap = (HBITMAP)LoadImage(NULL, L"cool.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
            if(hBitmap == NULL)
                ::printToDebugWindow("Error: loading bitmap\n");
            else 
                BYTE* b = ::getPixArray(hBitmap);     
Run Code Online (Sandbox Code Playgroud)

我的getPixArray函数

  BYTE* getPixArray(HBITMAP hBitmap)
        {
        HDC hdc,hdcMem;

        hdc = GetDC(NULL);
        hdcMem = CreateCompatibleDC(hdc); 

        BITMAPINFO MyBMInfo = {0};
        // Get the BITMAPINFO structure from the bitmap
        if(0 == GetDIBits(hdcMem, hBitmap, 0, 0, NULL, &MyBMInfo, DIB_RGB_COLORS))
        {
            ::printToDebugWindow("FAIL\n");
        }

        // create the bitmap buffer
        BYTE* lpPixels = new BYTE[MyBMInfo.bmiHeader.biSizeImage];

        MyBMInfo.bmiHeader.biSize = sizeof(MyBMInfo.bmiHeader);
        MyBMInfo.bmiHeader.biBitCount …
Run Code Online (Sandbox Code Playgroud)

c++ winapi

3
推荐指数
1
解决办法
2887
查看次数

C++中bool值的逻辑"或"效率

bool x = false, y = false, z = true;

if(x || y || z){}

or

if(x | y | z){}
Run Code Online (Sandbox Code Playgroud)

第二个if语句是否对所有布尔值执行了一些"或"操作?把它们视为有字节吗?ex)(0000 | 0000 | 0001)=真......

或者它是否像Java一样 在布尔值上,它会评估表达式中的每一个bool,即使第一个是真的吗?

我想知道位运算符如何处理bool值.它等于整数按位运算?

c++ boolean bitwise-operators

3
推荐指数
1
解决办法
1493
查看次数

c ++移动窗口而不改变其大小

RECT rec;

::GetClientRect(hWnd, &rec);
int windowWidth = rec.right - rec.left, windowHeight = rec.bottom - rec.top;

::printToDebugWindow(windowWidth,windowHeight); //prints 2 numbers

MoveWindow(hWnd,100,100,windowWidth,windowHeight,FALSE);
Run Code Online (Sandbox Code Playgroud)

问题是 windowWidth 和 windowHeight 由于某种原因正在改变。MoveWindow 似乎正在改变窗口尺寸。并将重绘设置为 TRUE 不会改变任何内容。

输出:

x:560,y:178
x:544,y:140
x:528,y:102
x:512,y:64
x:496,y:26

为什么尺寸每次迭代都会改变?

我也试过:没有变化

  int windowWidth = rec.right, windowHeight = rec.bottom;
Run Code Online (Sandbox Code Playgroud)

c++ move

2
推荐指数
1
解决办法
3459
查看次数

为什么没有调用析构函数?

这是合乎逻辑的,在堆栈上创建对象...对象的副本返回,原始被删除

Box operator +(const Box& box) const 
{
    Box b = Box(this->num + box.num);
    return b;                        
}  // destructor called!
Run Code Online (Sandbox Code Playgroud)

在这种情况下为什么这个过程不同?

Box operator +(const Box& box) const 
{
    return Box(this->num + box.num);
}   // destructor not called!
Run Code Online (Sandbox Code Playgroud)

为什么在第二个运算符重载方法中没有调用析构函数?

c++ stack

1
推荐指数
2
解决办法
111
查看次数

检查两个数字是否在彼此的 1% 以内

    public static double squareRoot(double num) throws IllegalArgumentException
    {
        if (num < 0.0)
            throw new IllegalArgumentException("Number cannot be negative.");
        double guess = num / 2.0, pastGuess;
        guess = 0.5 * (guess + (num / guess));

        do {
            pastGuess = guess;
            guess = 0.5 * (guess + (num / guess));
           } while ((pastGuess / guess) >= 1.01);// run until both numbers are within 1% of each other
        return guess; // return square root of num
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用巴比伦算法实现一个简单的 squareRoot 方法。我的问题是对于小于 0.01 的数字,结果非常不准确。

我希望循环运行,直到两个数字(过去猜测和猜测)彼此相差 …

java math comparison

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

删除char*崩溃程序

char* str = "hello myname is Stack";
delete[] str;
Run Code Online (Sandbox Code Playgroud)

为什么我的程序崩溃了?是否在堆栈上分配了char*str?

c++ char

0
推荐指数
1
解决办法
782
查看次数

在没有调用构造函数的对象数组中分配内存?

我想创建一个简单的模板arraylist类,但是当我做类似的事情

T* typeArray = new T[10];
Run Code Online (Sandbox Code Playgroud)

这将创建10个对象实例,调用构造函数10次.我怎样才能创建一个空数组,我以后可以放置对象?

c++ arrays

0
推荐指数
1
解决办法
127
查看次数

c ++从long转换为float奇怪的错误

        POINT p;
        RECT rec;

        ::GetClientRect(hWnd, &rec);
        LONG windowWidth = rec.right, windowHeight = rec.bottom;

        ::GetCursorPos(&p);//get position on screen
        ::ScreenToClient(hWnd,&p);//convert POINT to position in window

        // 2d vector math
        float x=0.0f,y=0.0f; // vector
        x= static_cast<float>(p.x - (windowWidth>>1)); // problem...
        y= static_cast<float>(p.y - (windowHeight>>1));

        char buf[100];
        sprintf_s(buf, "x: %d, y: %d\n", x,y); // create string to print
        OutputDebugStringA(buf); // print to debut window
Run Code Online (Sandbox Code Playgroud)

当我向控制台打印x和y时,它给了我疯狂的数字.看起来长时间投掷会丢失一些数据,但为什么呢?不应该有任何问题.

它打印:
x:0,y:1080795136

c++ casting window

0
推荐指数
1
解决办法
129
查看次数

初始化全局变量的问题

头文件

#ifndef H_MODEL_UTIL
#define H_MODEL_UTIL

#include "Mesh.h"

Mesh *kingHigh;

void InitModel();

#endif 
Run Code Online (Sandbox Code Playgroud)

源文件

#include "stdafx.h"
#include "ResourceLoader.h"
#include "ModelUtil.h"

void InitModel()
{
    ::kingHigh  = new Mesh();
}
Run Code Online (Sandbox Code Playgroud)

编译器输出:

1>Game.obj : error LNK2005: "class Mesh * kingHigh" (?kingHigh@@3PAVMesh@@A) already defined in Cube.obj

1>ModelUtil.obj : error LNK2005: "class Mesh * kingHigh" (?kingHigh@@3PAVMesh@@A) already defined in Cube.obj

1>C:\Users\Anthony\Desktop\C++ Learning\Extra\Rubiks Chess\Debug\Rubiks Chess.exe : fatal error LNK1169: one or more multiply defined symbols found
Run Code Online (Sandbox Code Playgroud)

我正在尝试初始化一个全局变量但我不断收到此错误.有简单的解决方案吗?

c++ global initialization

0
推荐指数
1
解决办法
132
查看次数