ASturct arr []和ASturct * arr []之间的区别

时间:2016-11-16 17:50:05

标签: c pointers

ASturct arr []和ASturct * arr []有什么区别?

ASturct array[]
ASturct * array[]

谢谢你的回答!

2 个答案:

答案 0 :(得分:1)

    - threadId:Thread 11208 - state:BLOCKED stackTrace: - java.util.HashSet.add(java.lang.Object) @bci=8, line=217 (Compiled frame; information may be imprecise) 
- java.util.AbstractCollection.addAll(java.util.Collection) @bci=29, line=342 (Compiled frame) 
    - java.util.LinkedHashSet. (java.util.Collection) @bci=22, line=169 (Interpreted frame) 
    - org.eclipse.persistence.internal.jpa.metamodel.ManagedTypeImpl.getAttributes() @bci=13, line=160 (Interpreted frame) 
    - org.eclipse.persistence.internal.jpa.metamodel.IdentifiableTypeImpl.initializeIdAttributes() @bci=12, line=95 (Compiled frame) 
    - org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.initialize(java.lang.ClassLoader) @bci=251, line=493 (Compiled frame) 
    - org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.getMetamodel(java.lang.ClassLoader) @bci=25, line=3476 (Interpreted frame) 
    - org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(java.lang.ClassLoader, java.util.Map) @bci=955, line=754 (Interpreted frame) 
    - org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession() @bci=54, line=205 (Interpreted frame) 
    - org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(java.util.Map, javax.persistence.SynchronizationType) @bci=5, line=305 (Interpreted frame) 
    - org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(java.util.Map, javax.persistence.SynchronizationType) @bci=90, line=337 (Interpreted frame) 
    - org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager() @bci=3, line=303 (Interpreted frame)

上面是ASturct类型的数组。

ASturct  array[]

这一个是指针数组(ASturct类型)。

答案 1 :(得分:0)

您似乎对数组和指针的工作方式存在基本的误解。

让我们举一个非常简单的例子:

int a = 1;
int b = 2;
int c = 3;

int array1[3] = { a, b, c };

上面的代码创建了一个包含三个int值的数组。在内存中它看起来像

+---+---+---+
| 1 | 2 | 3 |
+---+---+---+

变量abc不在数组中的任何位置,在初始化数组时,这些变量的值被复制到数组中。

现在让我们来一个 非常不同的 示例:

int a = 1;
int b = 2;
int c = 3;

int *array2[3] = { &a, &b, &c };

现在我们有一个数组指针,并初始化每个元素以指向变量abc。它在内存中看起来像这样

+----+----+----+
| &a | &b | &c |
+----+----+----+
 |    |    |
 |    |    v
 |    |    +---+
 |    |    | 3 |
 |    |    +---+
 |    v    
 |    +---+
 |    | 2 |
 |    +---+
 |
 v
 +---+
 | 1 |
 +---+

上面示例中的array1array2都是包含三个元素的数组,但相似之处到此为止。数组中每个元素的类型和值彼此非常不同。对于array1,每个元素都是一个int,它包含一个数字(例如1array1[0]。对于array2,每个元素都是指针int值,其值是int值的地址。