使用C的陣列來擴充lua
1.lua程式碼
ss = require "LUA2C1"
a= ss.new(1000) --陣列大小為1000
print(a)
print(ss.size(a)) --獲取陣列的大小
for i=1,1000 do
ss.set(a, i, 1/i) --設定陣列的值
end
print(ss.get(a, 10)) --獲取陣列的值
2.C程式碼(省略了標頭檔案)
typedef struct NumArray { int size; double values[1]; /* variable part */ } NumArray; static int newarray (lua_State *L) { int n = luaL_checkint(L, 1); //檢視引數是否為int型別 size_t nbytes = sizeof(NumArray) + (n - 1)*sizeof(double); //計算大小 NumArray *a = (NumArray *)lua_newuserdata(L, nbytes); //分配記憶體空間 a->size = n; //賦值 return 1; /* new userdatum is already on the stack *///傳遞給lua } static int setarray (lua_State *L) { NumArray *a = (NumArray *)lua_touserdata(L, 1); //返回1中記憶體塊的地址 int index = luaL_checkint(L, 2); //檢查第二個引數是否為int double value = luaL_checknumber(L, 3); //同上 luaL_argcheck(L, a != NULL, 1, "`array' expected"); //給第1個引數設定防錯資訊 luaL_argcheck(L, 1 <= index && index <= a->size, 2, //第二個引數的防錯 "index out of range"); a->values[index-1] = value; //設定陣列中的數值 return 0; } static int getarray (lua_State *L) { //獲取陣列中的值 NumArray *a = (NumArray *)lua_touserdata(L, 1); //從棧中獲取記憶體塊 int index = luaL_checkint(L, 2); //檢查第二個引數的值 luaL_argcheck(L, a != NULL, 1, "'array' expected"); luaL_argcheck(L, 1 <= index && index <= a->size, 2, "index out of range"); lua_pushnumber(L, a->values[index-1]); //獲取第二個引數的值 return 1; } static int getsize (lua_State *L) { //獲取陣列的大小 NumArray *a = (NumArray *)lua_touserdata(L, 1); luaL_argcheck(L, a != NULL, 1, "`array' expected"); lua_pushnumber(L, a->size); //獲取這個值 return 1; } static struct luaL_Reg func[] = { {"sum", sum}, {"l_map", l_map}, {"add", Add}, {"l_split", l_split}, {"showstr", showstr}, {"str_upper", str_upper}, {"new", newarray}, {"set", setarray}, {"get", getarray}, {"size", getsize}, {NULL, NULL} }; int luaopen_LUA2C1(lua_State *L) { luaL_register(L, "ss", func); return 1; }
相關推薦
使用C的陣列來擴充lua
1.lua程式碼 ss = require "LUA2C1" a= ss.new(1000) --陣列大小為1000 print(a) print(ss.size(a)) --獲取陣列的大小 for i=1,1000 do ss.set(a, i, 1/i)
C++ 中使用字元陣列來存放未知長度的字串
#include<iostream> #include<string> using namespace std; int main() { size_t arry_size = 10; char * p_str = new char[
c語言:用陣列來處理求Fibonacci數列問題
用陣列來處理求Fibonacci數列問題。解:程式:#include<stdio.h>int main(){int i, f[20] = { 1,1 };//對最前面兩個元素f[0]和f[1
C: 你來做裁判(排序)
!= pos tput amount UC class color sample 相同 Description 眾所周知,現在各大論壇有很多水王,他們的發貼數是如此之多,以至於必須要用高精度數才能保存。 現在ACMForum決定舉行一次水王爭霸賽, 比賽的規則是將
leetcode705+使用陣列來模擬hashset
https://leetcode.com/problems/design-hashset/description/ class MyHashSet { public: int Set[1000010] = {0}; /** Initialize your data struc
jsp頁面 用c標籤來迴圈遍歷資料庫某表中裡面的資料 但是頁面不顯示資料
控制檯也不報錯,頁面也不顯示? 遇到這個情況,第一看jsp頁面的c標籤寫的是否符合正規 我的jsp頁面的c標籤程式碼如下: c標籤迴圈遍歷的規範 1.有匯入c標籤庫 <%@taglib uri="http://java.sun.com/j
C++陣列(C++學習筆記 2)
陣列(array) 陣列是相同型別元素的集合。例如,整型陣列,字串陣列等。 陣列是一種順序容器,它包含單一型別的元素。 C++資料型別 c++中資料型別分為兩種:預定義型別和自定義資料型別。 預定義型別:即預先定義的基本內建資料型別。 自定義資料型別:允許使用者進行資料型別的
在C++專案中引入Lua(AlphaGo使用的方案)
最近大火的AlphaGo,其中的deepmind已經開源,可以到github中下載https://github.com/deepmind/lab·,網上還有一個基於Python開源AlphaGo,那個不是google的。通
C 陣列要點
陣列宣告 int ar[5]={11,22,}; &n
C++陣列簡單排序並返回序號
#include<vector> #include<algorithm> #include<iostream> using namespace std; void main() { double d1[10] = { 11, 2, 8, 4, 15, 25
C/C++陣列本質論
C/C++陣列本質論 理解陣列名 注:為方便講解,本節所說的指標的型別,指的是指標指向的型別。 1.對陣列名的簡單理解 陣列名錶示的是陣列的首地址。比如一維陣列int a[11]的陣列名a就表示陣列的首地址。這裡的首地址讓人產生誤解,認為陣列名錶示的是整個一維陣列的地址,其實陣列名指向的是陣
C#陣列 動態新增元素
string[] a = new string[] { "1", "2", "3" }; 給a追加一個 "4"
C++陣列求和用自帶的庫超級方便
C++陣列求和用自帶的庫超級方便,而且也達到程式碼更加簡潔的目的。 你只需要做2步: 1、匯入庫檔案 2、新增空間名 using namespace std; 然後就可以直接使用 : accumulate(arrayName, arrayName + 陣列長度, 陣列起
如何利用C語言來獲取當地時間和UTC時間 (設當地時間是北京時間)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
c/c++ 陣列實現迴圈queue
程式碼: #include <iostream> #define MAX 5 using namespace std; class Queue{ private: int a[MAX]; int Front; int Rear; public:
c/c++ 陣列實現棧
方法一:結構體實現 #include <iostream> using namespace std; typedef struct{ int d[10]; int top; }Stack; /****初始化一個棧*****/ void init(Stack *s
C/C++陣列詳解(一維和二維)
陣列這東西,說說都懂,但是似乎並沒有完全吃透,導致很多地方有疑惑。所以再梳理一遍。 陣列定義 陣列是存放型別相同的物件的容器,這些物件本身沒有名字,需要通過其所在位置訪問。 從定義中可以看出,陣列存放的是物件且型別相同。所以不存在引用的物件(引用不是物件)
c#陣列的操作
陣列是絕大部分變成語言都支援的一種資料型別,無論是C,C++,C#,或是java。陣列是具有相同資料型別的一組資料的集合。例如水果的集合–蘋果,橘子,香蕉等等。在程式設計中將這些集合稱為陣列。陣列中的每一個變數成為陣列的元素,陣列能夠容納元素的數量稱為的陣列的長度。陣列中的每一個元素都有唯一
C++ primer Plus書之---C++陣列
先看下面的程式碼 #include "iostream" using namespace std; int main() { int cards[4] = {1, 2, 3, 4}; int hand[4]; hand[4] = {2, 3, 4, 5}; hand = cards;
用C語言來根據運動員的描述判斷他們的名次
邏輯推理題的原題描述是這樣的: 5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果 A選手說:B第二,我第三; B選手說:我第二,E第四;