c ++指针和数组

1 c++ arrays pointers

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

int width = 100;
int height = 100;

float cam[] = {-1.1,-1.0,1.2};
float D[] = {0.2,0.2,-0.2};
float U[] = {0.0,1.0,0.0};

float* cross(float* v1,float* v2)
{
    float el1[] = {(v1[1]*v2[2]-v1[2]*v2[1]),(v1[2]*v2[0]-v1[0]*v2[2]),(v1[0]*v2[1]-v1[1]*v2[0])};
    return el1;
}

float* neg3(float* v)
{
    float arr[3];
    for(int i=0;i<3;i++)
    arr[i] = 0.0-(v[i]);

    return arr;
}

/*

float* cam_space(float* p)
{
    float* e1 = cross(D,U);
    float* e2 = cross(D,cross(U,D));
    float* e3_n = D;

    float ar[4];
    ar[0] = e1[0]*p[0]+e1[1]*p[1]+e1[2]*p[2];
    ar[1] = e2[0]*p[0]+e2[1]*p[1]+e2[2]*p[2];
    ar[2] = -(e3_n[0]*p[0]+e3_n[1]*p[1]+e3_n[2]*p[2]);
    ar[3] = p[3];
    return ar;
}

*/
float* translate(float* p,float* v)
{

    float arr1[3];
    for(int i=0;i<=2;i++)
    arr1[i] = p[i] + v[i];

    return arr1;
}


int main()
{
    float* poi;
    poi = cam;   //undo later

    float* nc;
    nc = neg3(cam);
    cout<<" "<<nc[0]<<" "<<nc[1]<<" "<<nc[2]<<endl;


    float arbit[3] = {0.1,0.1,0.1};

    float* temp1;
    temp1 = translate(poi,arbit);
    //float* temp2;
    //temp2 = cam_space(temp);

    cout<<" "<<nc[0]<<" "<<nc[1]<<" "<<nc[2]<<endl;
    cout<<" "<<poi[0]<<" "<<poi[1]<<" "<<poi[2]<<endl;


    cout<<" "<<temp1[0]<<" "<<temp1[1]<<" "<<temp1[2]<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我输出nc两次.但两个值都不同.第二次nc显示,它实际显示temp1值,并temp1实际显示垃圾值.有帮助吗?

Mah*_*esh 5

float* translate(float* p,float* v)
{

    float arr1[3];
    for(int i=0;i<=2;i++)
    arr1[i] = p[i] + v[i];

    return arr1;
}// arr1 ceases to exist from this point.
Run Code Online (Sandbox Code Playgroud)

您正在返回局部变量的引用,arr1.它驻留在堆栈上,并在函数调用返回时被取消分配.但是你持有对它的引用,它会产生垃圾值.而是arr1并返回它.完成后请记住它.new new[]delete[]

  • 你使用什么编译器,@ Arpit?`g ++`将在这里帮助你:`在函数'float*cross(float*,float*)':警告:局部变量'el1'的地址返回`等. (2认同)