我正在运行一个 C++ 测试,并遇到了这个任务,如果你仔细想想,结果应该是 False,我在三个编译器中检查了它并被卡住了。请解释一下为什么是假的?优先事项 !更高,但是是从右到左;本例中其余运算符的优先级较低,从左到右。
我开始学习 WinAPI 的基础知识(嗯,正如我开始的那样,这是大学老师的作业)。锻炼。您需要通过将“&”运算符替换为“==”来使下面的条件起作用。
// Функция обработки сообщений
...
...
case WM_LBUTTONDBLCLK: {
if (GetWindowLong(hWnd, GWL_STYLE) & WS_POPUP) {...}
从作者对我的问题的回答中,我意识到 GetWindowLong 函数返回一个 32 位字,其中的位是标志。当使用“==”运算符而不是“&”时,需要处理GetWindowLong以便只保留我需要的位,这是什么意思?如何执行此操作(如果设置了标志:WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_VISIBLE | WS_SYSMENU)?预先感谢您抽出时间。澄清。代码本身是可以工作的,但是用“==”替换“&”运算符的任务是老师开的一个玩笑,需要完成。
当输入 2x2 数组时,循环仅检查底行。
输入示例:
Input n, m:
2 2
Input a[2][2]:
1 2
3 4
Choose a number:
1
There is no such element
当输入 3x3 数组时,程序会提前结束并出现错误代码 139。
Input n, m:
3 3
Input a[3][3]:
1 2 3
4 5 6
7 8 9
这是程序:
#include <iostream>
#include <conio.h>
using namespace std;
int main() {
int n, m, i, j, b, k;
float a[n][m];
cout << "Input n, m:\n";
cin >> n >> m;
cout << "Input a[" << n << "][" << m << "]:\n";
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
cin >> a[i][j];
}
}
cout << "Choose a number:\n";
cin >> b;
k = -1;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (a[i][j] == b) {
k = j;
break;
}
}
}
if (k >= 0)
cout << "Number of a column with a number: " << j << "\n";
else
cout << "There is no such element" << endl;
getch();
}
我试图创建一个void类型的函数来创建一个二维动态数组,并在主函数中创建某种指针以快速访问这个二维数组,但最终出现了一堆错误。我知道通过相同类型的 double 来做到这一点会更容易,但我已经想知道这是否可以通过void实现?
using namespace std;
void Array(unsigned int rows, unsigned int colms)
{
double** array2d = new double* [rows];
for (unsigned int i = 0; i < rows; i++)
array2d[i] = new double[colms];
}
int main()
{
// 1. Создание двумерного массива
unsigned int numRows = 4;
unsigned int numCols = 10;
void (*list)(unsigned int, unsigned int) = Array;
// 2. Инициализация двумерного массива
int data = 0;
for (unsigned int i = 0; i < numRows; i++)
for (unsigned int j = 0; j < numCols; j++)
{
list[i][j] = data;
data++;
}
// 3. Выводим двумерный массив в консоль
for (unsigned int i = 0; i < numRows; i++)
{
for (unsigned int j = 0; j < numCols; j++)
cout << list[i][j] << " ";
cout << endl;
}
// 4. Освобождаем память
for (unsigned int i = 0; i < numRows; i++)
{
double* p_row = list[i];
cout << i << ": " << p_row;
delete[] p_row;
cout << " -(delete[] p_row)-> " << p_row;
p_row = nullptr;
cout << " -(p_row = nullptr)-> " << p_row << endl;
}
delete[] list;
list = nullptr;
return 0;
}
我已经学习 C++ 两周了。请告诉我,按照我的逻辑,当在 cin 运算符中输入一个字符串常量(例如“animal”)时,该常量被放置在一个数组中,并且自然地,自动字符 \0 也被放置。但是,在执行循环时,cout 仍然显示整个字符串(按相反顺序逐个字符),但我在 i 变量中明确指定了它(没有添加 -1),因此它显示的第一个字符是 \0 字符。 。数组索引对应于[6],我的话,考虑到数组索引从[0]开始,存储在单元格0到单元格5之间。即6中会有一个零字符,那么为什么cout对象无论如何都会输出整个单词,因为对于它来说,零意味着停止。
int main()
{
cout << "Enter a word:";
char word[ArSize];
cin >> word;
for (int i = strlen(word); i >= 0; i--)
cout << word[i];