C中两个函数有什么区别?
void f1(double a[]) {
//...
}
void f2(double *a) {
//...
}
Run Code Online (Sandbox Code Playgroud)
如果我要在一个相当长的数组上调用这些函数,这两个函数的行为会不同,它们会占用更多的空间吗?
我尝试过以下方法:
char[10] testfunc()
{
char[10] str;
return str;
}
Run Code Online (Sandbox Code Playgroud) 我遇到了以下签名
double(&rotate_vec(double(&val)[4]))[4];
Run Code Online (Sandbox Code Playgroud)
在评论中,它"声称" 接受并返回四个元素的数组.我的第一反应是,这甚至看起来不是标准的c ++,但是这个编译:
double(&rotate_vec(double(&val)[4]))[4]
{
// ...
return val;
}
int main()
{
double ar[4] = { 1, 2, 3, 5 };
rotate_vec(ar);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
作为背景,我不久前给出了这篇文章的答案:
它无意中开始了一个关于指针与C++中的数组的长链注释链,因为我试图过度简化并且我做了"数组是指针"的声明.虽然我的最终答案听起来相当不错,但只是在对我收到的很多评论进行了大量编辑之后.
这个问题并不是拖钓诱饵,我理解指针和数组不是一回事,但C++语言中的一些可用语法肯定会使它们在很多情况下表现得非常相似.(仅供参考,我的编译器已i686-apple-darwin9-g++-4.0.1开启OS X 10.5.8)
例如,这段代码编译并运行就好了(我意识到这x[8]是一个潜在的分段错误):
//this is just a simple pointer
int *x = new int;
cout << x << " " << (*x) << " " << x[8] << endl; //might segfault
//this is a dynamic array
int* y = new int[10];
cout << y << " " << (*y) << " " << y[8] << endl;
//this is a static array
int z[10];
cout << z << " " << …Run Code Online (Sandbox Code Playgroud) 这是我的代码
double hour_payload_add(int entries , double array[])
{
int index=0 ,k=0;
int totalpayload=0;
double returnarray[entries/120];
while(k< entries)
{
totalpayload = totalpayload + array[k];
if(k%120==0)
{
returnarray[index] = totalpayload;
index++;
totalpayload=0;
}
}
return returnarray;
}
Run Code Online (Sandbox Code Playgroud)
我在这里打过电话
double hourgraph[hrentries];
hourgraph= hour_payload_add(entries , graph);
Run Code Online (Sandbox Code Playgroud)
因为我想返回一个数组我应该怎么做才能返回而不使用指针?
我需要创建一个返回指向int的指针的函数.
像这样:
int * count()
{
int myInt = 5;
int * const p = &myInt;
return p;
}
Run Code Online (Sandbox Code Playgroud)
由于指针只是一个地址,因此在调用此函数后,变量myInt将被销毁.如何在此方法中声明一个int,它将在内存中保留一个位置,以便我以后通过返回的指针访问它?我知道我可以在函数外部声明int,但是我想在函数内部声明它.
在此先感谢您的帮助!
一个问题设置 ++的人学习C是
写一个简短的程序来模拟从塔上掉下来的球.首先,应该要求用户以米为单位的塔的初始高度.假设正常重力(9.8 m/s2),并且球没有初始速度.让程序在0,1,2,3,4和5秒后输出球高于地面的高度.球不应该在地下(高度0).
在开始使用C++之前,我有一个合理的,但主要是自学成才的Java知识.所以看看这个问题似乎应该分成两部分
输入类将询问用户的起始高度,该起始高度将传递给控制器.控制器会给计算类提供这个和几秒钟(5),这将创建一个结果数组并将其返回给控制器.控制器会将结果数组交给输出类,然后将它们打印到控制台.
我将实际代码放在底部,但可能不需要.
您可能已经看到问题,尝试返回一个数组.我不问如何避开这个问题,有解决方法在这里和这里.我问,问题是设计糟糕的结果吗?我的程序是否应该以不同的方式构建,出于性能,维护或样式的原因,我不会尝试返回像对象一样的数组?
这是代码(与尝试返回数组不同);
main.cpp中
/*
* Just the main class, call other classes and passes variables around
*/
#include <iostream>
#include "dropSim.h"
using namespace std;
int main()
{
double height = getHeight();
int seconds = 5;
double* results = calculateResults(height, seconds);
outputResults(results);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
getHeight.cpp
/*
* Asks the user for a height from which …Run Code Online (Sandbox Code Playgroud) int method1() {
return 0;
}
decltype(method1) method2() {
return method1;
}
Run Code Online (Sandbox Code Playgroud)
我编译我的代码,得到一个错误:'method2'声明为函数返回一个函数,然后我将返回类型更改为函数指针,它工作,我只是想为什么它是这样.
decltype(method1) *method2() {
return method1;
}
Run Code Online (Sandbox Code Playgroud)