我无法找到指针数组的长度.比方说我有:
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) 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 ?? //差不多......
#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类; 在主要之前但它不起作用.
首先我加载图像"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) 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值.它等于整数按位运算?
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) 这是合乎逻辑的,在堆栈上创建对象...对象的副本返回,原始被删除
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)
为什么在第二个运算符重载方法中没有调用析构函数?
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 的数字,结果非常不准确。
我希望循环运行,直到两个数字(过去猜测和猜测)彼此相差 …
char* str = "hello myname is Stack";
delete[] str;
Run Code Online (Sandbox Code Playgroud)
为什么我的程序崩溃了?是否在堆栈上分配了char*str?
我想创建一个简单的模板arraylist类,但是当我做类似的事情
T* typeArray = new T[10];
Run Code Online (Sandbox Code Playgroud)
这将创建10个对象实例,调用构造函数10次.我怎样才能创建一个空数组,我以后可以放置对象?
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
头文件
#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)
我正在尝试初始化一个全局变量但我不断收到此错误.有简单的解决方案吗?