結構體java
//結構體可以用類代替,變數保存的就是結構體這種Object類型。所以不需要加*號即可。
classTriTreeNode{
publicStringname="";
publicTriTreeNodemLeftChild;
publicTriTreeNodemRightChild;
;
;
;
}
publicclassTest24{
publicstaticvoidmain(String[]args){
/*創建一個節點*/
TriTreeNodemTriTreeNode=newTriTreeNode();
mTriTreeNode.name="A";
/*再創建一個孩子節點,添加到上個節點的左孩子*/
TriTreeNodebTri=newTriTreeNode();
bTri.name="B";
mTriTreeNode.mLeftChild=bTri;
/*再創建個孩子節點,添加到A節點的右孩子*/
TriTreeNodecTri=newTriTreeNode();
bTri.name="C";
mTriTreeNode.mRightChild=cTri;
/*再創建一個節點D,添加到B孩子的左節點上*/
TriTreeNodedTri=newTriTreeNode();
bTri.name="D";
bTri.mLeftChild=dTri;
}
}
② C++中的結構體在java中應該怎麼定義
struct Stu
{
int n;
};
void test(struct Stu *s[])
void main()
{
struct Stu *s;
s=new Stu[10];//請問這里是不是動態開辟一個struct的數組呢????????
//然後我調用test()
test(s);
}
你定義的s是指向一個結構體變數的,而不是結構體數組
如果要指向一個結構體數組,應該這樣定義,struct Stu (*s)[];//s指向一個結構體數組
s=new Stu[10];
這樣就可以了
另外:void test(struct Stu *s[])//Stu *s[],那麼s是一個指針數組,而不是一個指針,但是s數組中的元逗陵和素都是指向結構體變數的指針變數...
你的意思是想讓s指向一個結構體數組,那麼改成這樣:void test(struct Stu (*s)[])應該汪磨就可以了.(還不行的話,就直接改成void test(struct Stu *s)試試,不過我感覺這個可能不對,因為類型也不匹配,但沒有運行過..)
呵呵
祝你學習順利...
剛運行過了,我的修改不行
一樓應該是正解...
s=new Stu[10];//請問這里是不是動態開辟一個struct的數組呢????????
是在內存的堆區中動態山盯開辟一個長度為10的結構體數組....
堆區中開辟的內存不會因為函數的結束而自動釋放,所以函數結束前要使用一條delete s;語句來釋放分配的內存...
改成下面的就對了...
#include<iostream.h>
struct Stu
{
int n;
};
void test(struct Stu *s[])
{}
void main()
{
struct Stu **s;
s=new Stu*[10];//請問這里是不是動態開辟一個struct的數組呢????????
//然後我調用test()
test(s);
}
你的意思是s指向一個指針數組,那麼s就是一個指向指針的指針變數,所以應該是
struct Stu **s;
s中的元素是指針變數,那麼就應該這樣:s=new Stu*[10];
呵呵,希望對你有所幫助..
③ java socket 如何發送一個結構體消息,java中結構體是個什麼概念...
有一個socket 程序,一端是c++寫的socket 服務程序
另一端是Java寫客戶端程序,兩者之間需要通信。
c++/c接收和發送的都是結構體,而Java是直接發送的位元組流或者byte 數組。
解決方法:c++/c socket 在發送結構體的時候其實發送的也是位元組流。因為結構體本身也是內存中的一塊連續數據。問題就變成了如何把結構體手動轉成位元組的問題了
採用類似的報頭:
// packet head
typedef struct tagPacketHead{
long PacketID;
long PacketLen;
}PacketHead;此時套介面的讀寫方式為先讀報頭,在報頭中取出數據負載的長度,然後再讀相應位元組謹宴的數據。
包頭後面跟上包體,其中包體的長度,就是上面結構體中的PacketLen,Clinet首先接受包頭,因為包頭是兩邊約定好的,所以可以直接Receive一個定長的消息,也就是這個包頭的長度的消息,從包頭中取得包體的長度後,就可以再次Receive一個包談晌枯體長度的消息了。那麼Java中如何發送一個結構體呢?下面是解決方法:
使用C/S模式,Client為VC6開發,Server為Java,通過Socket通信。
package org.charry.org;
import java.net.*;
/**
*
* 位元組轉換,參考網路文章含洞
*/
class Packet {
private byte[] buf = null;
/**
* 將int轉為低位元組在前,高位元組在後的byte數組
*/
private static byte[] toLH(int n) {
byte[] b = new byte[4];
b[0] = (byte) (n & 0xff);
b[1] = (byte) (n >> 8 & 0xff);
b[2] = (byte) (n >> 16 & 0xff);
b[3] = (byte) (n >> 24 & 0xff);
return b;
}
/**
* 將float轉為低位元組在前,高位元組在後的byte數組
*/
private static byte[] toLH(float f) {
return toLH(Float.floatToRawIntBits(f));
}
/**
* 構造並轉換
*/
public Packet(int packetID, int packetLen, String packetBody) {
byte[] temp = null;
buf = new byte[packetBody.getBytes().length + 8];
temp = toLH(packetID);
System.array(temp, 0, buf, 0, temp.length);
temp = toLH(packetLen);
System.array(temp, 0, buf, 4, temp.length);
System.array(packetBody.getBytes(), 0, buf, 8, packetBody.length());
}
/**
* 返回要發送的數組
*/
public byte[] getBuf() {
return buf;
}
/**
* 發送測試
*/
public static void main(String[] args) {
try {
String tmp = 「test string!」;
Socket sock = new Socket(」127.0.0.1″, 8888);
sock.getOutputStream().write(
new Packet(123, tmp.length(), tmp).getBuf());
sock.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
如果需要用Java 接收結構體的話只需要將上面過程逆過來即可。
④ java裡面有沒有結構體
有
{
盯橋//1
//2
畢敬//3
if(b)berak;//如果b為true那麼,代碼4就不會被執凱數猛行,進而繼續執行代碼5
//4
}
//5
⑤ C++中的結構體對應與java中的什麼
對c++來說,結構體基本相備粗神當於一個只有public成員的類,即無法支持訪問控制。也就是說,c++中你用結構體寫的,都可以用類完成。
java中的類,對於c++的類
java普通對象方仿虧法(非static,非final)對應於c++類普凳帆通的 virtual 方法
java抽象方法/介面聲明方法,對應於 c++類virtual fun()=0;的形式
⑥ 基礎問題,c語言中的結構體,在java中怎麼表示
由雹頃叢於Java是完源櫻全面向對象編程的,因此C語言中的結構體在Java中可以寫為一個類,類中包含多個成員變數,對應於結構體中的各個乎枝變數。
⑦ java 如何實現結構體
Java並不像c語言一樣定義了結構體的語法形式,取而代之的是類,聲明一個類,裡麵包含很多屬性,也就是相當於結構體中多種變數類型的功能。
Java屬於高級語言,其發展就是從c、c++演變而來,去掉了煩惱的指針,舍棄掉了一些類似於結構體的不必要的語言結構。
⑧ java調用c++庫的時候有結構體怎麼辦
Java調用C庫的時候,可以使用JNA或者JNI來調用C庫中的結構體。JNA可以通過映射啟晌一個Java內部類來實現對應C庫中結悄隱鋒構體的攜亮映射,而JNI則需要在Java代碼中定義一個數據結構,它將會與C庫中的結構體保持一致。