❶ 如何通過變數索引實現數組訪問
下面的語法用於命名為"Quantities"的數組元素的索引定址,"Quantities"數組在數據塊"Data_DB"中進行聲明:
•"Data_DB". Quantities ["i"] (一維數組)
•"Data_DB". Quantities ["i"] (一維結構體數組)
•"Data_DB". Quantities ["i", "j"] (多維數組)
•"Data_DB". Quantities ["i", "j"].a (多維結構體數組)
組成部分 描述
Data_DB 用於存儲數組變數的數據塊的名稱
Quantities 數組類型的變數
i , j PLC用於指針的整數形變數
a 結構體其他的可變變數
圖.01 中展示了對位於數據塊中的數組元素進行定址的程序代碼。在此把SIMATIC S7-1200/S7-1500和 S7-300/400做了個比較。在SIMATIC S7-300/400控制器中數組變數的起始地址必須已知,並且在使用地址寄存器時索引定址也必須完成。
❷ java如何批量往可變數組中填入數據
可變數組是指集合么,一般集合提供有addAll,putAll方法
❸ 如何建立一個大小不定,可變的數組
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
/*主程序
大小不定,可變的數組,可以通過將指針指向動態分配的內存來實現功能.
程序功能:輸入數組長度,分配內存空間,利用隨機數生成數組元素並輸出*/
intmain(){
inti,n;
int*p;//指針,下面用來指向動態分配空間
srand((unsigned)time(NULL));//初始化隨機數種子
printf("numberofarrayelements: ");
while(scanf("%d",&n)!=NULL){//輸入長度n,ctrl+z結束循環
p=(int*)malloc(sizeof(int)*n);//分配空間
for(i=0;i!=n;++i){
*(p+i)=rand()%100;//生成100以內隨整數
printf("%2d",p[i]);//訪問p
}
printf(" ");
}
return0;
}
❹ 如何做出一個C++可變長數組,請各位幫忙
查看vector源碼,照抄並簡化一下!抄一下MFC的CArray也不錯!只要一個指針和一個指示大小的整型就可以了,其他都是錦上添花而已
C++怎麼又變成C了。
這么好像很復雜,其實很簡單的。
1)需要一個T類型的指針,動態分配內存,需要一個整數記錄數組大小
2)一個預設構造函數
vector();// 無成員,或者任意常量個成員
和一個單參構造函數
vector(int n); //n 個成員
3)添加成員,需要動態改變分配的內存大小。
改變成員數量的函數:
void resize( int n);
添加成員的函數:
void push_back(const T&t);
4)查找指定成員,逐一查找;const int find(const T& t);
查找固定位置的成員----實現 constr T& operator[](int n)const;
5)索引方式訪問 實現
下標運算符[] 重載,即
constr T& operator[](int n)const;和
T& operator[](int n);
6)同類型對象賦值,實現
復制構造函數
vector(vector &v);
和 賦值運算符重載
vector operator=(const vector &v
);
7)獲取數組當前長度
int size()const ;
不是很復雜呀!
❺ 主程序中未分配的可變數組,如何在子程序中調用
具體方法:
選擇菜單命令工具(T) > 指令向導叄?緩笱≡?NETR/NETW;
1 指定您需要的網路操作數目
2 指定埠號和子程序名稱
3 指定網路操作
4 分配 V 存儲區
5 生成代碼
為了便於進行連接在網路中的 PLC 之間的數據交換,S7-200支持網路讀(NETR)和網路寫(NETW)指令。NETR 指令從遠程 PLC中的指定地址讀取配置好的一定數量的數據。NETW 指令向遠程PLC中的指定地址寫入配置好的一定數量的數據。NETR
和 NETW 指令操作由數據表中的前七個位元組控制。表中的一個數值是讀取/寫入數據長度,可以規定 1 至 16 個位元組。因此數據表最大可達 23 個位元組。
注釋:在使用 HSC 向導之前,程序必須被編譯,且處於符號編址模式。如果您尚未編譯程序,向導在 HSC 配置過程開始時會提示您編譯程序。
向導將向您詢問初始化選項,然後為指定配置生成程序代碼和數據塊代碼。從第一個屏幕選擇NETR/NETW後,向導向您詢問下列信息:
步驟 1 指定您需要的網路操作數目
注釋:如果項目包含使用 STEP 7 Micro/WIN 3.2 版建立的現有 NETR/ NETW 配置,您必須在繼續執行步驟 1 之前選擇編輯其中一個現有配置或建立一個新配置。
可使用 NETR/NETW 指令向導,簡化網路操作配置。向導將向您詢問初始化選項,並根據您的選擇生成完整的配置。向導允許您配置多達 24 項獨立的網路操作,並生成代碼協調這些操作。
步驟 2 指定埠號和子程序名稱
注釋:項目可能已經包含一個 NETR/NETW 向導配置。所有以前建立的配置均被自動載入向導。向導會提示您完成以下兩個步驟之一:
?選擇編輯現有配置,方法是點擊「下一步>」。
?選擇從項目中刪除現有配置,方法是選擇「刪除」復選框,並點擊「完成」。
如果不存在以前的配置,向導會詢問以下信息:
1. PLC 必須被設為 PPI 主站模式才能進行通信。您要指定通信將通過哪一個 PLC 埠進行。
2. 向導建立一個用於執行具體網路操作的參數化子程序。向導還為子程序指定一個默認名稱。您可以編輯默認名稱。
步驟 3 指定網路操作
對於每項網路操作,您需要提供下列信息:
1. 指定操作是 NETR 還是 NETW。
2. 指定從遠程 PLC(NETR)讀取的數據位元組數或向遠程 PLC(NETW)寫入的數據位元組數。
3. 指定您希望用於通信的遠程 PLC 網路地址。
4. 如果您在配置NETR,指定以下內容:
- 數據存儲在本地 PLC 中的位置。有效操作數:VB、IB、QB、MB、LB。
- 從遠程 PLC 讀取數據的位置。有效操作數:VB、IB、QB、MB、LB。
5. 如果您在配置 NETW,指定以下內容:
- 數據存儲在本地 PLC 中的位置。有效操作數:VB、IB、QB、MB、LB。
- 向遠程 PLC 寫入數據的位置。有效操作數:VB、IB、QB、MB、LB。
步驟 4 分配 V 存儲區
對於您配置的每一項網路操作,要求有 12 個位元組的 V 存儲區。您指定可放置配置的 V 存儲區起始地址。向導會自動為您建議一個地址,但您可以編輯該地址。請注意,如果您使用重疊地址,向導在顯示一則警告後,允許您進入下一步。
注釋: 在 NETR 操作中,請確認將用於存儲數據的變數地址沒有與分配給向導配置的存儲區地址重疊。
步驟 5 生成程序代碼
回答這些詢問後,點擊「完成」,S7-200 指令向導將為您指定的網路操作生成代碼。由向導建立的子程序成為項目的一部分。要在程序中使能網路通信,需要在主程序塊中調用執行子程序(NET_EXE)。每次掃描周期時,使用 SM0.0 調用該子程序。這樣會啟動配置網路操作執行。為每項網路操作建立的數據處理子程序會在適當時間被自動調用。
❻ 在西門子中如何通過變數索引實現數組訪問
下面的語法用於命名為"Quantities"的數組元素的索引定址,"Quantities"數組在數據塊"Data_DB"中進行聲明:
•"Data_DB". Quantities ["i"] (一維數組)
•"Data_DB". Quantities ["i"] (一維結構體數組)
•"Data_DB". Quantities ["i", "j"] (多維數組)
•"Data_DB". Quantities ["i", "j"].a (多維結構體數組)
組成部分 描述
Data_DB 用於存儲數組變數的數據塊的名稱
Quantities 數組類型的變數
i , j PLC用於指針的整數形變數
a 結構體其他的可變變數
圖.01 中展示了對位於數據塊中的數組元素進行定址的程序代碼。在此把SIMATIC S7-1200/S7-1500和 S7-300/400做了個比較。在SIMATIC S7-300/400控制器中數組變數的起始地址必須已知,並且在使用地址寄存器時索引定址也必須完成。
❼ 30分求救 誰能詳細的講一下c#的可變數組用法
.net 2.0中微軟推薦使用的可變數組類型為List<T>。
表示可通過索引訪問的對象的強類型列表。提供用於對列表進行搜索、排序和操作的方法。
命名空間: System.Collections.Generic
程序集: mscorlib(在 mscorlib.dll 中)
語法
Visual Basic(聲明)
<SerializableAttribute> _
Public Class List(Of T) _
Implements IList(Of T), ICollection(Of T), _
IEnumerable(Of T), IList, ICollection, IEnumerable
Visual Basic (用法)
Dim instance As List(Of T)
C#
[SerializableAttribute]
public class List<T> : IList<T>, ICollection<T>,
IEnumerable<T>, IList, ICollection, IEnumerable
Visual C++
[SerializableAttribute]
generic<typename T>
public ref class List : IList<T>, ICollection<T>,
IEnumerable<T>, IList, ICollection, IEnumerable
J#
J# 支持使用泛型 API,但是不支持新泛型 API 的聲明。
JScript
JScript 不支持泛型類型或方法。
類型參數
T
列表中元素的類型。
備注
List(T) 類是 ArrayList 類的泛型等效類。該類使用大小可按需動態增加的數組實現 IList(T) 泛型介面。
List(T) 類既使用相等比較器又使用排序比較器。
諸如 Contains、IndexOf、LastIndexOf 和 Remove 這樣的方法對列表元素使用相等比較器。類型 T 的默認相等比較器按如下方式確定。如果類型 T 實現 IEquatable(T) 泛型介面,則相等比較器為該介面的 Equals(T) 方法;否則,默認相等比較器為 Object.Equals(Object)。
諸如 BinarySearch 和 Sort 這樣的方法對列表元素使用排序比較器。類型 T 的默認比較器按如下方式確定。如果類型 T 實現 IComparable(T) 泛型介面,則默認比較器為該介面的 CompareTo(T) 方法;否則,如果類型 T 實現非泛型 IComparable 介面,則默認比較器為該介面的 CompareTo(Object) 方法。如果類型 T 沒有實現其中任一個介面,則不存在默認比較器,並且必須顯式提供比較器或比較委託。
List(T) 不保證是排序的。在執行要求 List(T) 已排序的操作(例如 BinarySearch)之前,您必須對 List(T) 進行排序。
可使用一個整數索引訪問此集合中的元素。此集合中的索引從零開始。
List(T) 接受 null 引用(在 Visual Basic 中為 Nothing) 作為引用類型的有效值並且允許有重復的元素。
性能注意事項
在決定使用 List(T) 還是使用 ArrayList 類(兩者具有類似的功能)時,記住 List(T) 類在大多數情況下執行得更好並且是類型安全的。如果對 List(T) 類的類型 T 使用引用類型,則兩個類的行為是完全相同的。但是,如果對類型 T 使用值類型,則需要考慮實現和裝箱問題。
如果對類型 T 使用值類型,則編譯器將特別針對該值類型生成 List(T) 類的實現。這意味著不必對 List(T) 對象的列表元素進行裝箱就可以使用該元素,並且在創建大約 500 個列表元素之後,不對列表元素裝箱所節省的內存將大於生成該類實現所使用的內存。
確保用於類型 T 的值類型實現 IEquatable(T) 泛型介面。如果未實現,則諸如 Contains 這樣的方法必須調用 Object.Equals(Object) 方法,後者對受影響的列表元素進行裝箱。如果值類型實現 IComparable 介面,並且您擁有源代碼,則還應實現 IComparable(T) 泛型介面以防止 BinarySearch 和 Sort 方法對列表元素進行裝箱。如果您不擁有源代碼,則將一個 IComparer(T) 對象傳遞給 BinarySearch 和 Sort 方法。
使用 List(T) 類的特定於類型的實現,而不是使用 ArrayList 類或自己編寫強類型包裝集合,這樣是很有好處的。原因是您的實現必須做 .NET Framework 已經為您完成的工作,並且公共語言運行時能夠共享 Microsoft 中間語言代碼和元素據,這是您的實現所無法做到的。
示例
下面的代碼示例演示 List(T) 泛型類的幾個屬性和方法。該代碼示例使用默認構造函數創建具有默認容量的字元串列表。隨後顯示 Capacity 屬性,然後使用 Add 方法添加若干項。添加的項被列出,Capacity 屬性會同 Count 屬性一起再次顯示,指示已根據需要增加了容量。
該示例使用 Contains 方法測試該列表中是否存在某個項,使用 Insert 方法在列表的中間插入一個新項,然後再次顯示列表的內容。
默認的 Item 屬性(C# 中的索引器)用於檢索項,Remove 方法用於移除前面添加的重復項的第一個實例,然後,該示例再次顯示內容。Remove 方法總是移除它所遇到的第一個實例。
該示例使用 TrimExcess 方法減小容量以匹配計數,然後顯示 Capacity 和 Count 屬性。如果未用容量已經小於總容量的 10%,則列表容量不會進行調整。
最後,代碼示例使用 Clear 方法移除列表中的所有項,並顯示 Capacity 和 Count 屬性。
Visual Basic
Imports System
Imports System.Collections.Generic
Public Class Example
Public Shared Sub Main()
Dim dinosaurs As New List(Of String)
Console.WriteLine(vbLf & "Capacity: {0}", dinosaurs.Capacity)
dinosaurs.Add("Tyrannosaurus")
dinosaurs.Add("Amargasaurus")
dinosaurs.Add("Mamenchisaurus")
dinosaurs.Add("Deinonychus")
dinosaurs.Add("Compsognathus")
Console.WriteLine()
For Each dinosaur As String In dinosaurs
Console.WriteLine(dinosaur)
Next
Console.WriteLine(vbLf & "Capacity: {0}", dinosaurs.Capacity)
Console.WriteLine("Count: {0}", dinosaurs.Count)
Console.WriteLine(vbLf & "Contains(""Deinonychus""): {0}", _
dinosaurs.Contains("Deinonychus"))
Console.WriteLine(vbLf & "Insert(2, ""Compsognathus"")")
dinosaurs.Insert(2, "Compsognathus")
Console.WriteLine()
For Each dinosaur As String In dinosaurs
Console.WriteLine(dinosaur)
Next
Console.WriteLine(vbLf & "dinosaurs(3): {0}", dinosaurs(3))
Console.WriteLine(vbLf & "Remove(""Compsognathus"")")
dinosaurs.Remove("Compsognathus")
Console.WriteLine()
For Each dinosaur As String In dinosaurs
Console.WriteLine(dinosaur)
Next
dinosaurs.TrimExcess()
Console.WriteLine(vbLf & "TrimExcess()")
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity)
Console.WriteLine("Count: {0}", dinosaurs.Count)
dinosaurs.Clear()
Console.WriteLine(vbLf & "Clear()")
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity)
Console.WriteLine("Count: {0}", dinosaurs.Count)
End Sub
End Class
' This code example proces the following output:
'
'Capacity: 0
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Deinonychus
'Compsognathus
'
'Capacity: 8
'Count: 5
'
'Contains("Deinonychus"): True
'
'Insert(2, "Compsognathus")
'
'Tyrannosaurus
'Amargasaurus
'Compsognathus
'Mamenchisaurus
'Deinonychus
'Compsognathus
'
'dinosaurs(3): Mamenchisaurus
'
'Remove("Compsognathus")
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Deinonychus
'Compsognathus
'
'TrimExcess()
'Capacity: 5
'Count: 5
'
'Clear()
'Capacity: 5
'Count: 0
C#
using System;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
List<string> dinosaurs = new List<string>();
Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);
dinosaurs.Add("Tyrannosaurus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Mamenchisaurus");
dinosaurs.Add("Deinonychus");
dinosaurs.Add("Compsognathus");
Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}
Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);
Console.WriteLine("Count: {0}", dinosaurs.Count);
Console.WriteLine("\nContains(\"Deinonychus\"): {0}",
dinosaurs.Contains("Deinonychus"));
Console.WriteLine("\nInsert(2, \"Compsognathus\")");
dinosaurs.Insert(2, "Compsognathus");
Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}
Console.WriteLine("\ndinosaurs[3]: {0}", dinosaurs[3]);
Console.WriteLine("\nRemove(\"Compsognathus\")");
dinosaurs.Remove("Compsognathus");
Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}
dinosaurs.TrimExcess();
Console.WriteLine("\nTrimExcess()");
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
Console.WriteLine("Count: {0}", dinosaurs.Count);
dinosaurs.Clear();
Console.WriteLine("\nClear()");
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
Console.WriteLine("Count: {0}", dinosaurs.Count);
}
}
/* This code example proces the following output:
Capacity: 0
Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus
Compsognathus
Capacity: 8
Count: 5
Contains("Deinonychus"): True
Insert(2, "Compsognathus")
Tyrannosaurus
Amargasaurus
Compsognathus
Mamenchisaurus
Deinonychus
Compsognathus
dinosaurs[3]: Mamenchisaurus
Remove("Compsognathus")
Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus
Compsognathus
TrimExcess()
Capacity: 5
Count: 5
Clear()
Capacity: 5
Count: 0
*/
❽ OC可變數組中如何修改其中一個對象中得一個欄位
您好,如果您想得到可變數組的某個元素,有以下兩種方法
您知道您需要的元素在數組中的位置,那麼您可以直接通過數組名[索引]的方式來直接訪問並賦值即可
如果您不知道元素在數組中的位置,而只知道元素的對象內容的話,您可以遍歷數組並使用一個條件判斷語句(如果當前元素的內容與您需要的元素內容相同),只需要直接替換該元素即可
❾ 怎麼訪問數組中的數據
使用for循環語句+文件操作函數即可文件中數據讀取並存到數組中。
1、C語言標准庫提供了一系列文件操作函數。文件操作函數一般以f+單詞的形式來命名(f是file的簡寫),其聲明位於stdio.h頭文件當中。例如:fopen、fclose函數用於文件打開與關閉;fscanf、fgets函數用於文件讀取;fprintf、fputs函數用於文件寫入;ftell、fseek函數用於文件操作位置的獲取與設置。一般的C語言教程都有文件操作一章,可以找本教材進一步學習。
2、常式:
#include<stdio.h>
int i,a[100];
int main(){
FILE * fp1 = fopen("input.txt", "r");//打開輸入文件
FILE * fp2 = fopen("output.txt", "w");//打開輸出文件
if (fp1==NULL || fp2==NULL) {//若打開文件失敗則退出
puts("不能打開文件!");
rturn 0;
}
for(i=0;fscanf(fp1,"%d",a+i)!=EOF;i++);//從輸入文件連續讀取整數到數組a
for(;i--;)fscanf(fp2,"%d ",a[i]);//把數組a逆序寫入到輸出文件當中
fclose(fp1);//關閉輸入文件
fclose(fp2);//關閉輸出文件,相當於保存
return 0;
}
❿ C語言 可變長數組
我就不看你的bubble sort的演算法部分了,直接跟你講你不知道錯誤的原因。
你第一種寫法:
int n=1, a[n], i=0, j=0, k=0;
這里你已經定義n = 1, 而a[n]也在該行定義。
那麼編譯器在此就直接給a這個數列分配內存了。
也就是說你a這個數組大小就確定了,即為1。
我不知道你學了內存分配沒有,簡單給你講解一下,
具體你可以在網上搜。
比如一個含有5個整數類型的數組可以這樣定義a[5],
但是也可以這樣獲得:int *a = (int *) malloc ( sizeof( int ) * 5 );
也就是說我們給一個指針分配了內存,從而得到一個數組,
而a[5]這樣定義也是需要編譯器在編譯程序的時候分配內存的
而編譯器會根據你的代碼優化你的程序,並把代碼轉化為匯編再者machine code
說多了,繼續給你分析
你修改過的代碼
int n=1, i=0, j=0, k=0;
printf("請輸入數組長度:");
scanf("%d", &n);
int a[n]; //修改
這個時候由於你在聲明數組之前就已經讀入n了,
所以a這個時候才是根據你輸入的數字所得大小的數組。
這樣你懂我的意思了嗎?