C實(shí)現(xiàn)不定長(zhǎng)數(shù)組的示例
寫(xiě)程序的時(shí)候經(jīng)常要定義這樣一個(gè)數(shù)組,要前面程序運(yùn)行后才能知道數(shù)組的大小,然而C語(yǔ)言不支持直接定義不定長(zhǎng)數(shù)組的定義,但是我們可以通過(guò)動(dòng)態(tài)數(shù)組實(shí)現(xiàn)一個(gè)不定長(zhǎng)度的數(shù)組。
一維數(shù)組:
#include<stdio.h>
#include<stdlib.h>//要使用malloc是要包含此頭文件
#include <memory.h>//要使用memset是要包含此頭文件
int main()
{
int m;
scanf("%d", &m);//scanf只是遇到回車(chē)符的時(shí)候結(jié)束,并沒(méi)有把回車(chē)符輸入,因此輸入流中還有一個(gè)回車(chē)符
getchar();//把輸入流中的回車(chē)符讀走
int *p;
p = (int*)malloc(m*(sizeof(int)));//動(dòng)態(tài)申請(qǐng)內(nèi)存
memset(p, 0, m);//初始化,每個(gè)元素都為零
int i;
for (i=0;i<m; i++)//數(shù)組賦值
{
p[i] = i;
}
for (i = 0; i <m; i++)//打印數(shù)組
{
printf("%d,", p[i]);
}
free(p);//釋放內(nèi)存
getchar();//讓程序停頓,好看到輸出
return 0;
}
二維不定長(zhǎng)數(shù)組
#include <stdio.h>
#include <stdlib.h>//要使用malloc是要包含此頭文件
#include <memory.h>//要使用memset是要包含此頭文件
int main()
{
int m, n;
scanf("%d%d", &m,&n);//scanf只是遇到回車(chē)符的時(shí)候結(jié)束,并沒(méi)有把回車(chē)符輸入,因此輸入流中還有一個(gè)回車(chē)符
getchar();//把輸入流中的回車(chē)符讀走
int **p;
p = (int**)malloc(m*(sizeof(int*)));//二級(jí)指針?biāo)诘刂飞暾?qǐng)內(nèi)存
int i, j;
for (i = 0; i<m; i++)
p[i] = (int*)malloc(sizeof(int)*n);//一級(jí)指針?biāo)诘刂飞暾?qǐng)內(nèi)存
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
p[i][j] = i + j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d %p ", p[i][j], &p[i][j]); //輸出每個(gè)元素及地址,每行的列與列之間的地址時(shí)連續(xù)的,行與行之間的地址不連續(xù)
}
printf("\n");
}
for (i = 0; i < m; i++) free(p[i]);
free(p);
getchar();//讓程序停頓,好看到輸出
return 0;
}
以上這篇C實(shí)現(xiàn)不定長(zhǎng)數(shù)組的示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言詳細(xì)分析講解關(guān)鍵字const與volatile的用法
在C語(yǔ)言中,我們經(jīng)常會(huì)見(jiàn)到const和volatile這兩個(gè)關(guān)鍵字,那么我們今天就來(lái)介紹下這兩個(gè)關(guān)鍵字,提起?const?關(guān)鍵字,我們可能首先想到的是經(jīng)過(guò)它修飾的變量便是常量了。其實(shí)我們這種想法是錯(cuò)誤的,其實(shí)?const?修飾的變量是只讀的,其本質(zhì)還是變量2022-04-04
簡(jiǎn)單分析C語(yǔ)言中指針數(shù)組與數(shù)組指針的區(qū)別
這篇文章主要介紹了C語(yǔ)言中指針數(shù)組與數(shù)組指針的區(qū)別,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-11-11
C++實(shí)現(xiàn)LeetCode(45.跳躍游戲之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(45.跳躍游戲之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
如何在c++中實(shí)現(xiàn)字符串分割函數(shù)split詳解
這篇文章主要給大家介紹了關(guān)于如何在c++中實(shí)現(xiàn)字符串分割函數(shù)split的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
C/C++詳解實(shí)現(xiàn)二層轉(zhuǎn)發(fā)
數(shù)據(jù)鏈路層是開(kāi)放系統(tǒng)互連 (OSI) 模型中的第二層,該層用于通過(guò) LAN 等單一網(wǎng)絡(luò)進(jìn)行通信的節(jié)點(diǎn),第二層數(shù)據(jù)包不能從一個(gè)網(wǎng)絡(luò)傳輸?shù)搅硪粋€(gè)網(wǎng)絡(luò)。而二層轉(zhuǎn)發(fā)是根據(jù)報(bào)文的目的MAC直接進(jìn)行轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)過(guò)程中不用對(duì)報(bào)文的頭部做任何的修改2022-05-05

