我为C& C++尝试了相同的程序,即将2D数组传递给函数。下面的程序在C语言中工作,但在C++中不工作,请解释为什么?
在C中
#include<stdio.h>
void pass(int n, int arr[][n]) // or void pass(int n, int (*arr)[n])
{
printf("%d",arr[0][0]);
//.....
}
int main()
{
int n;
scanf("%d",&n);
int arr[n][n];
arr[0][0]=0;
pass(n,arr);
r
当我使用学习C时,它不允许我创建一个非恒定大小的数组。我要么放一个像int arr[5];这样的值,要么做#define size 5和int arr[size];。然而,今天使用Clion,我注意到它允许我做以下工作:
#include <stdio.h>
int main()
{
printf("Enter a value: ");
int x;
scanf("%d", &x);
int arr2[x];
for (int i = 0; i < x; i++)
{
所以我和我的朋友聊天,帮她写了一段代码,我总是认为数组需要是编译时常量,因为它们在堆栈上。但她说她的朋友是用下面的代码做的:
#include <iostream.h>
#include <stdlib.h>
int main()
{
int value = ' ' ;
int sum = 0;
int count = 0;
cout<<"Please enter the total number of employees" <<endl;;
cin>> valu
在windows MSVC中,我试图编译以下代码。 void foo(std::vector<double> &bar){
const long int length = bar.size();
double a[length]; //error C3863: array type 'double [length]' is not assignable
for(int i=0; i < length; i++){
a[i]=0.0;
}
//do some other things
} 代码在x
我将一个二维数组传递给标记函数。
void mark(int n, int m, int i, int j, int canvisit[][m], int a[][m]){}
这段代码在C语言中可以很好地工作在代码块上,但是在C++中,我得到的错误如下:
prog.cpp:9:55: error: use of parameter outside function body before ']' token
void mark(int n, int m, int i, int j, int canvisit[][m], int a[][m]){
为什么要这么做?
#include <iostream>
int main()
{
std::cout << "Enter a number: ";
int arraySize;
std::cin >> arraySize;
int array[arraySize];
for(int element : array)
{
element = 42;
std::co
可能重复:
这是常量大小为4的简单数组的定义,它存储在堆栈内存中:
int array[4];
现在,如果我想在堆栈中声明动态大小的数组,似乎应该编写以下代码:
int n;
cin >> n;
int array[n];
但是,正如我们所知道的,这在C++中是不允许的,我们可以编写这个,它将在动态内存(即堆)中创建数组:
int n;
cin >> n;
int *array = new int[n];
但是这要慢得多,而且(因为使用了新的运算符),需要在我们完成数组的工作之后调用delete []操作符。
所以我的问题是:
为什么C++不允许在堆栈内存中创建动
我试图通过用不同的语言实现不同的算法来练习编程。关于插入排序的c++实现,我有两个问题。首先,为什么c++中的大多数实现都包含一个length参数,而其他实现(例如java )只访问for循环中的数组长度?下一个问题是,为什么大多数实现都在while循环中交换变量,而不是在最后交换变量呢?我已经包含了两个实现,以便更容易地讨论。
Java实现:
void insertionSort(int[] arr) {
int i, j, newValue;
for (i = 1; i < arr.length; i++) {
newValue = a
我正在从来自word文件的字符串中提取一个子字符串。但是,即使子字符串的起始和结束索引小于字符串的长度,我也会得到index out of range错误。
for(int i=0;i<y.Length-1;i++)
{
if (Regex.IsMatch(y[i], @"^[A]"))
{
NumberOfWords= y[i].Split(' ').Length;
if (NumberOfWords > 5)
{
int le = y[i].L
在C编程中,我遇到了一种情况:我意外地初始化了一个大小可变的数组,并且它起了作用。我做了一些研究,显然可变长度数组可以从C99编译中获得。显然,GCC 4.8.2的默认编译选项是C98。
下面是我用来测试的代码:
#include "stdio.h"
#include "stdlib.h" // rand(), srand()
#include "time.h"
void printArray(const char* c) {
// impossible to get size of c because it returns point
我需要创建一个程序,用户输入所需的数组大小,然后C++代码创建它,然后允许数据进入它。
这在代码块IDE中有效,但在VisualStudioCommunity2015中不起作用
当我将下面的代码放在CodeBlocks版本13.12中时,它可以工作
#include<iostream>
using namespace std;
int main()
{
int count;
cout << "Making the Array" << endl;
cout << "How many elements
我已经写了一段时间的代码了,但是C++对我来说还是个新手。
我知道C++中有静态数组和动态数组。静态数组在编译时被分配内存,在堆中的运行时被分配动态内存。动态数组声明为:
data-type * variable = new data-type[value];
例如:-
int*a = new int[n];
和静态数组声明:
int a[n]; //where n already has value during the compilation time.
所以,我的问题是-
#include <iostream>
using namespace std;
int mai
我有一个在线日记,其中两个主要的MyISAM表如下:
**tbl_log_days**
Name Type
ID int(11)
post_date date
post_content longtext
post_entry_date datetime
post_cat_id int(11)
post_update_date datetime
**tbl_log_cats**
Name Type
fld_id
我是一个新手,正在努力完成下面的教程
// Create a method called countEvens
// Return the number of even ints in the given array.
// Note: the % "mod" operator computes the remainder, e.g. 5 % 2 is 1.
/*
* SAMPLE OUTPUT:
*
* 3
* 0
* 2
*
*/
下面是我的代码
public static void main(String[] args)
int checkdiag(int arr[][100], int size)
{
int h=0,i,j,count=0;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(arr[i][j]==arr[++i][++i])
count++;
if(count=size)
h=1;
return(h);
}
这个函数应该检查我的2D数组,看看是否所有的对角线都是相同的值。最大数组大小为100 x 100。
in
起初我认为这可能是C++的语言限制,但这实际上是编译的,只是出于某些原因智能感知无法识别类成员:
struct MyStruct
{
int member;
};
MyStruct staticObj;
int main()
{
MyStruct localObj;
int arr1[] = { 1, 2, localObj.member }; // When typing localObj Intellisense says it has no members
int arr2[] = { 1, 2, staticObj.member };
有谁能给我一个关于如何从java服务器向c#客户端发送文件和从c#到java接收完整确认消息的小教程吗?实际上,我是C#新手,不知道如何进行套接字编程。我被困在里面很久了。尝试了很多密码。一些代码接收不完整的文件,有些被困在无限循环中。请在这方面帮助我。谢谢
以下是我尝试过的编辑:
C#服务器:
{
IPAddress ipAd = IPAddress.Parse("192.168.1.131");
// use local m/c IP address, and
// use the same in
我有一个看起来像这样的结构:
typedef struct foo {
int this;
int that;
int length;
int info[]; // legal for last element of a struct
} Foo;
当我编译它时,我会收到这样的警告:
C4200 nonstandard extension used: zero-sized array in struct/union
我只是活在警告中,还是我可以设置一些属性来告诉Visual使用C-99?
我慢慢地把自己提升到了c++11,我看着constexpr,无意中走进了这个,这让我发现了“完全不同的东西”。它给出的基本例子是:
int get_five() {return 5;}
int some_value[get_five() + 7]; // Create an array of 12 integers. Ill-formed C++
它声明“这在C++03中是不合法的,因为get_five() +7不是一个常量表达式。”并表示将constexpr添加到get_five()声明可以解决这个问题。
我的问题是“什么问题?”我编译的代码既没有错误也没有警告。我玩过它,使它变得非常不稳定
这应该很简单,而且很可能是这样,但在我的C代码中,在开始迭代之前,我想知道表的大小。我需要预先分配一些内存来存储来自该表的值。
我将这个表作为lua c函数中的一个参数。
static int lua_FloatArray(lua_State *L)
{
int n = lua_gettop(L);
if (n != 1 || lua_gettype(L, 1) != LUA_TTABLE)
{
luaL_error(L, "FloatArray expects first parameter to be a table");
return 0;
}
int
我最近注意到我的一个同事在做
int len = foo.length();
for (int i = 0; i < len; ++i)
doStuff(foo[i]);
我知道这在C中被认为是很好的实践,在C中,strlen()在O(length_of_string)中运行。但我希望较新的语言(比如Java或Python)将字符串的长度与字符一起存储,从而允许length()以O(1)的速度运行。我通常这样写:
for (int i = 0; i < foo.length(); ++i)
doStuff(foo[i]);
节省一行代码。但是我的同事让我想知道...
如何将此代码移植到Objective-C中?任何人请帮帮忙。
return data.length != 0 ? new Byte(data[0]) : null; // In Java
我是这样做的,但这没有显示出正确的结果
return datalen!= 0?malloc(sizeof(char) *data[0]) :NULL; //In Objective C it is write java data is byte
**In obj C** datalen int datalen = sizeof(data)/sizeof(*data);
我无法返回数据值。有什么问题吗