我最近开始学习C,我正在以C为主题.我正在玩循环,我遇到了一些我不知道如何解释的奇怪行为.
#include <stdio.h>
int main()
{
int array[10],i;
for (i = 0; i <=10 ; i++)
{
array[i]=0; /*code should never terminate*/
printf("test \n");
}
printf("%d \n", sizeof(array)/sizeof(int));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的运行Ubuntu 14.04的笔记本电脑上,此代码不会中断.它运行完成.在我学校的运行CentOS 6.6的计算机上,它运行良好.在Windows 8.1上,循环永远不会终止.
更奇怪的是,当我将for
循环条件编辑为:时i <= 11
,代码只会在运行Ubuntu的笔记本电脑上终止.它永远不会在CentOS和Windows中终止.
任何人都可以解释内存中发生的事情以及运行相同代码的不同操作系统为什么会产生不同的结果?
编辑:我知道for循环超出范围.我是故意这样做的.我无法弄清楚不同操作系统和计算机之间的行为有何不同.
我想转换string
为char
数组但不是char*
.我知道如何将字符串转换为char*
(通过使用malloc
或我在代码中发布它的方式) - 但这不是我想要的.我只是想转换string
为char[size]
数组.可能吗?
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
int main()
{
// char to string
char tab[4];
tab[0] = 'c';
tab[1] = 'a';
tab[2] = 't';
tab[3] = '\0';
string tmp(tab);
cout << tmp << "\n";
// string to char* - but thats not what I want
char *c = const_cast<char*>(tmp.c_str());
cout << c << "\n";
//string to char
char tab2[1024];
// …
Run Code Online (Sandbox Code Playgroud) 我是C++编程的初学者.
今天我遇到了一个新主题:强类型enum
.我对它进行了一些研究但到目前为止我无法找到为什么我们需要这个以及它的用途是什么?
例如,如果我们有:
enum xyz{a, b, c};
/*a = 0, b = 1, c = 2, (Typical C format)*/
Run Code Online (Sandbox Code Playgroud)
为什么我们需要写:
enum class xyz{a, b, c};
Run Code Online (Sandbox Code Playgroud)
我们在这里做什么?我最重要的疑问是如何使用它.你能提供一个小例子,这会让我理解.
我正在考虑使用typeid()
但我不知道如何询问该类型是否是另一个类的子类(顺便说一下,它是抽象的)
我正在尝试学习Fortran,我看到很多不同的定义被传递,我想知道他们是否想要完成同样的事情.以下有什么区别?
integer*4
integer(4)
integer(kind=4)
我想enum
为一个switch
语句使用一个值.是否可以使用所enum
包含的值"{}"
作为switch()
"?我知道switch()
需要一个int
eger值才能将编程流程指向适当的case
数字.如果是这种情况,我是否只为每个常量创建一个变量在enum
声明中?我还希望用户能够选择并将该选择传递给switch()
语句.
例如:
cout << "1 - Easy, ";
cout << "2 - Medium, ";
cout << "3 - Hard: ";
enum myChoice { EASY = 1, MEDIUM = 2, HARD = 3 };
cin >> ????
switch(????)
{
case 1/EASY: // (can I just type case EASY?)
cout << "You picked easy!";
break;
case 2/MEDIUM:
cout << "You picked medium!"; …
Run Code Online (Sandbox Code Playgroud) 我是C的新手,具有良好的java背景,我正在尝试理解指针和数组.
我知道下标operator[]
是数组定义的一部分,所以:
int numbers[] = {1,3,4,5};
Run Code Online (Sandbox Code Playgroud)
会创建一个整数数组,它将在内存中表示为16个字节,4个4个字节:
numbers[0] = 1, address 0061FF1C
numbers[1] = 3, address 0061FF20
numbers[2] = 4, address 0061FF24
numbers[3] = 5, address 0061FF28
Run Code Online (Sandbox Code Playgroud)
但是,当涉及指针时,我的知识开始崩溃,所以如果我要创建一个指向数组数字的指针,我将执行以下操作:
int *pNumbers = &numbers[0];
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
而且我猜它的大小是4字节?
然而,**
我读作"指针指针"对我来说没有意义,为什么有人想要指针指针,当然如果a-> b-> c然后a-> c就足够了?我知道我错过了一些东西,它必须与数组有关,argv
可以是类型char[ ]
或char **
下面看到的:
int main(int argc, char **argv){}
Run Code Online (Sandbox Code Playgroud)
所以:
**
)?该程序具有用户输入name
/ age
对,然后使用类输出它们.这是代码.
#include "std_lib_facilities.h"
class Name_pairs
{
public:
bool test();
void read_names();
void read_ages();
void print();
private:
vector<string>names;
vector<double>ages;
string name;
double age;
};
void Name_pairs::read_names()
{
cout << "Enter name: ";
cin >> name;
names.push_back(name);
cout << endl;
}
void Name_pairs::read_ages()
{
cout << "Enter corresponding age: ";
cin >> age;
ages.push_back(age);
cout << endl;
}
void Name_pairs::print()
{
for(int i = 0; i < names.size() && i < ages.size(); ++i)
cout << names[i] << " …
Run Code Online (Sandbox Code Playgroud) 我想打开一个文件进行阅读,即C++方式.我需要能够做到:
文本文件,涉及某种读取线功能.
二进制文件,它提供了一种将原始数据读入char*
缓冲区的方法.