将指针作为参数传递给函数的正确方法是什么?

时间:2016-05-15 02:10:42

标签: c++ arrays pointers

假设我正在定义一个打印多维数组元素的函数。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>aopricing</groupId>
<artifactId>aopricing</artifactId>
<version>0.0.1-SNAPSHOT</version>

<repositories>
    <repository>
        <id>spring-releases</id>
        <url>https://repo.spring.io/libs-release</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>spring-releases</id>
        <url>https://repo.spring.io/libs-release</url>
    </pluginRepository>
</pluginRepositories>


<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>

</properties>


<dependencies>



    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>1.3.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>


</dependencies>

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>

        </plugin>

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source />
                <target />
            </configuration>
        </plugin>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>server.Application</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>

    </plugins>
</build>

当我在main中使用 -

调用此函数时
int print(int *a)
{
 for (int i=0;i<4;i++)
{ 
for(int j=0;j<4;j++)
{  
cout<< *((a+i*4)+j);}
}
}
return 0;}

它显示错误,但在使用

调用时提供正确的输出
int c=print(int *a) or print(a)

这3个有什么区别?

1 个答案:

答案 0 :(得分:-2)

请先阅读:此处描述的方法可能会导致内存泄漏。如果不考虑内存对齐和大小,可能永远不会抛出指针。

  1. 这是一个糟糕的电话。

    int c=print(int *a);
    
  2. 这应该是正确的方法,你应该确保“a”是指向int的指针,否则你可能会有内存泄漏,请注意你的编译器警告。

    int c=print(a);
    
  3. 在这种情况下你正在进行A的显式转换,强制它成为指向int的指针,不管你有什么,你可以导致内存泄漏,注意你的编译器警告。

    int c=print((int*)a);
    
  4. 注意

    如果你不清楚这个概念,使用C / C ++中的指针是非常危险的。如果你不指挥你的指针,这个阶段的任何错误都可能导致致命的内存泄漏。内存泄漏是由于这种情况导致的内存不一致,当指针不在正确的强制转换时,它可能会使程序或其任何部分崩溃。

    关于你的头衔:

    你在询问“int *”和“(int *)”之间的区别,你的问题没有很好地形成。它可能是:

    “将指针作为参数传递给函数的正确方法是什么”