typedef 數組使用詳解

typedef到處都是,但是能夠真正懂得typedef使用的不算太多。對于初學者而言,看別人的源碼時對到處充斥的typedef往往不知所錯,而參考書又很少,所以在此給出一個源碼,供大家參考。



懂得這些,基本上是 對typedef 合格了, 有時間,我會把c,c++中使用typedef的例子和標準中規定詳解解讀,敬請期待。

?

#include <stdio.h>

#include <iostream.h>

?

/* 避免Visual C的for與標準for的不同 */

#definefor? if (0);??elsefor

?

/* dim(a)是用于計算a的維數,不過只能計算數組的維數,不能計算指針的維數 */

#define dim(a) (sizeof(a)/sizeof(a[0]))

?

/* N1到N4是幾個常量,以枚舉的形式定義 */

enum {N1 = 2, N2 = 3, N3 = 4, N4 = 5};

?

/* 這個C程序員都知道,就是將DataType定義為int型,便于擴充 */

typedefint DataType;

?

/* 定義一個一維數組,數組的元素維整型值 */

typedef DataType ARR1[N4];

?

/* 再定義一個一維數組,數組的元素維ARR1型,不過ARR1又是一個數組,所以

?* ARR2 實際上是一個矩陣

?*/

typedef ARR1 ARR2[N3]; /*此處完全等價為typedef int ARR2[N3][N4];*/

?

/* 按照ARR2的解釋,ARR3也是一個一維數組,不過數組元素的類型是ARR2的類型

?* 所有ARR3是一個三維數組

?*/

typedef ARR2 ARR3[N2];/* 此處完全等價為typedef int ARR3[N2][N3][N4];*/

?

/* 分別用定義好的ARR1,ARR2,ARR3定義三個變量a, b, c */

ARR1 a; /* 此處完全等價于:int a[N4]; */

ARR2 b; /* 此處完全等價于:int b[N3][N4]; */

ARR3 c; /* 此處完全等價于:int c[N2][N3][N4]; */

?

/* 下面函數給大家個示例看a,b,c如何使用 */

void exam_1()

{

??? for (int i=0; i<dim(a); i++) a[i] = i+1;

?

??? for (int i=0; i<dim(b); i++)for (int j=0; j<dim(b[0]); j++)

??? ????b[i][j] = (i+1)*10 + (j+1);

?

??? for (int i=0; i<dim(c); i++)for (int j=0; j<dim(c[0]); j++)

??? ????for (int k=0; k<dim(c[0][0]); k++) c[i][j][k] = (i+1)*100 + (j+1)*10 + (k+1);

?

??? printf("\nThe a is :\n");

??? for (int i=0; i<dim(a); i++) printf("%4d ", a[i]);

??? printf("\n");

?

??? printf("\nThe b is :\n");

??? for (int i=0; i<dim(b); i++)

??? {

??? ????for (int j=0; j<dim(b[0]); j++) printf("%4d ", b[i][j]);

??? ????printf("\n");

??? }

?

??? printf("\nthe c is:\n");

??? for (int i=0; i<dim(c); i++)

??? {

??? ????for (int j=0; j<dim(c[0]); j++)

??? ????{

??? ????????for (int k=0; k<dim(c[0][0]); k++) printf("%4d ", c[i][j][k]);

??? ????????printf("\n");

??? ????}

??? ????printf("\n");

??? }

}

?

/* 下面函數給大家演示數組在內存中的排列 */

void exam_2()

{

??? int *pn =NULL;

?

??? pn = (int *)a; /*等價于 pn = &a[0]; */

??? printf("\nThe a is :\n");

??? for (int i=0; i<sizeof(a)/sizeof(DataType); i++) printf("%4d ", pn[i]);

??? printf("\n");

?

??? pn = (int *)b; /*等價于 pn = &b[0][0]; */

??? printf("\nThe b is :\n");

??? for (int i=0; i<sizeof(b)/sizeof(DataType); i++) printf("%4d ", pn[i]);

??? printf("\n");

?

??? pn = (int *)c; /*等價于 pn = &c[0][0][0]; */

??? printf("\nThe c is :\n");

??? for (int i=0; i<sizeof(c)/sizeof(DataType); i++) printf("%4d ", pn[i]);

??? printf("\n");

}

?

?

?

int main(int argc,char* argv[])

{

??? exam_1();

??? exam_2();

??? return 0;


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452679.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php柱狀圖實現年齡分布,考官雅思寫作小作文滿分范文 柱狀圖:年齡分布

考官雅思寫作小作文滿分范文 柱狀圖:年齡分布2017年06月12日14:48 來源&#xff1a;小站教育作者&#xff1a;小站雅思編輯參與(40)閱讀(63981)摘要&#xff1a;為大家分享前考官simon演示的9分雅思小作文。考官親筆&#xff0c;用最正統的4段式寫作&#xff0c;本文主題-柱狀圖…

Flask項目--注冊

0.效果展示 1.后端代碼 # coding:utf-8from . import api from flask import request, jsonify, current_app, session from ihome.utils.response_code import RET from ihome import redis_store, db, constants from ihome.models import User from sqlalchemy.exc import I…

圖片處理

//圖片處理public function img(){//讀取圖片$imageImage::open(./img/02.jpg);//dump($image);//獲取圖片的信息// 返回圖片的寬度$width $image->width();// 返回圖片的高度$height $image->height();// 返回圖片的類型$type $image->type();// 返回圖片的mime類…

react 項目總結

前言 最近在寫一個項目,在寫react的過程中遇到過很多坑,現在總結一下,為以后的項目作參考.另外借此項目來比較一下 vue.js 和 react.js 之間的一些異同. 先說說組件 剛剛開始寫組件的時候&#xff0c;感覺難度不大&#xff08;跟vue差不多&#xff09;。最有意思的應該是jsx語法…

現代數字影視 電影使用標準

1、國際數字電影標準1&#xff09;DCI&#xff08;Digital Cinema Initiatives數字影院系統規范&#xff09;美國好萊塢七大制片公司——Disney、MGM、Fox、Paramount Pictures、Sony Pictures Entertainment、Universal Studios和Warner Bros于2002年聯合成立了DCI機構&#x…

數據流圖 系統流程圖 程序流程圖 系統結構圖聯系與區別

1.數據流圖&#xff08;Data Flow Diagram&#xff09;&#xff0c;簡稱DFD&#xff0c;它從數據傳遞和加工角度&#xff0c;以圖形方式來表達系統的邏輯功能、數據在系統內部的邏輯流向和邏輯變換過程&#xff0c;是結構化系統分析方法的主要表達工具及用于表示軟件模型的一種…

Linux--安裝yum源

linux配置yum源 一、修改yum的配置文件 /etc/yum.repos.d/xxx.repo 1、進入yum配置文件目錄 # cd /etc/yum.repos.d 2、刪除全部原有的文件 # rm -rf * 3、新建一個yum的配置文件 # vi my.repo [myrepo] 標識配置文件名稱&#xff08;名字隨意&#xff09; namemyrepo 標識yum …

在 Confluence 6 中禁用 workbox 應用通知

如果你選擇 不提供應用通知&#xff08;does not provide in-app notifications&#xff09;&#xff1a; Confluence workbox 圖標將不會可見同時用戶也不能在這個服務器上訪問 workbox。這個 Confluence 服務器將不會發送消息到 workbox 中&#xff0c;同時也不會發送消息到其…

迄今為止最快的 JSON 序列化工具 Jil

2019獨角獸企業重金招聘Python工程師標準>>> 迄今為止最快的 JSON 序列化工具 Jil https://github.com/kevin-montrose/Jil 轉載于:https://my.oschina.net/xainghu/blog/1621365

mysql數據庫訪問編程,mysql 連接數據庫

1、首先啟動mysql 并鏈接數據 小意思吧&#xff01;都會了是吧mysql -uroot -p //連接數據net start mysql // 啟動mysql2、查詢當前 服務器里有哪些數據show databases;3、創建數據庫create database jddb -------數據庫名字(jddb)4、 使用數據庫use jddb;5、查詢當前數據庫下…

linux多線程 pthread用法

#include int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg); Returns: 0 if OK, error number on failure 第一個參數為指向線程標識符的指針。 第二個參數用來設置線程屬性。 第三個參數是…

什么是數據字典

數據字典是指對數據的數據項、數據結構、數據流、數據存儲、處理邏輯、外部實體等進行定義和描述&#xff0c;其目的是對數據流程圖中的各個元素做出詳細的說明。 數據字典最重要的作用是作為分析階段的工具。任何字典最重要的用途都是供人查詢對不了解的條目的解釋&#xff0c…

Flsak愛家租房--個人信息

0.頁面展示效果 1.設置用戶頭像–后端代碼 # coding:utf-8from . import api from ihome.utils.commons import login_required from flask import g, current_app, jsonify, request, session from ihome.utils.response_code import RET from ihome.utils.image_storage impo…

json返回值為null顯示key值的設置

使用的是阿里的json ----------com.alibaba.fastjson.JSONObject; Map<String,Object> map new HashMap<String,Object>(); return JSONObject.toJSONString(map); --------轉義的時候&#xff0c;map中值是null的字段會被忽略掉&#xff0c;轉義的json沒有帶n…

C++ string::size_type

從邏輯上講&#xff0c;size()成員函數應該似乎返回整型數值&#xff0c;但事實上&#xff0c;size操作返回是string::size_type類型的值。string類類型和其他許多庫類型都定義了一些配套類型(companion type)。通過這些配套類型&#xff0c;庫函數的使用就與機器無關(machine-…

需求分遵循的準則

?必須理解并描述問題的信息域&#xff0c;根據這條準則應該建立數據模型。 ?必須定義軟件應完成的功能&#xff0c;這條準則要求建立功能模型。 ?必須描述作為外部事件結果的軟件行為&#xff0c;這條準則要求建立行為模型 ?必須對描述信息、功能和行為的模型進行分解&…

MATLAB顯示錯誤使用untitled,新手,用gui界面畫李薩如圖,出錯,求解答

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓function varargout untitled1(varargin)% UNTITLED1 MATLAB code for untitled1.fig% UNTITLED1, by itself, creates a new UNTITLED1 or raises the existing% singleton*.%% H UNTITLED1 returns the handle to a new UNTITL…

軟件開發如同木匠做桌子

做一張桌子看起來十分的簡單。任何人都可以做&#xff0c;不是嗎&#xff1f;找個大塊的四方形木板&#xff0c;四個等長的木頭柱子&#xff0c;四個釘子和一個錘子。把四個柱子釘到四方板的四個角上&#xff0c;你就做成了一個桌子。當當當&#xff01; 現在來讓一個真正的木…

Django加載靜態文件

方法一: 1.在app目錄中創建static 目錄&#xff0c;并在該目錄下創建存儲css,img,js的子目錄&#xff0e; 2.在相應的目錄下創建相對應的靜態文件. static/css/mystyle.css, static/img/timg.jpg,(保存圖片) static/js/myjs.js 3.在模板文件中加載靜態文件 例: mystyle.css: bo…

Flsak愛家租房--實名認證

0.頁面展示效果 1.設置用戶實名認證信息–后端代碼 api.route("/users/auth", methods["POST"]) login_required def set_user_auth():"""保存實名認證信息"""user_id g.user_id# 獲取參數req_data request.get_json()if …