日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言学习笔记(4)

發(fā)布時(shí)間:2024/4/15 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言学习笔记(4) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

1. 數(shù)組大小

我相信,在C#/Java中,更多的人愿意用List<T>來取代數(shù)組,一方面是List提供了較多的方法,另一方面也無需我們?nèi)ブ付〝?shù)組的大小。

那么在C語(yǔ)言中,我們既然需要必須指定數(shù)組的大小,而一般來講,很多數(shù)組大小事我們無法確定并且經(jīng)常會(huì)發(fā)生變化的,那么我們最好的方式就是用宏定義來限定數(shù)組的大小。

#define SIZE 10

int main (void)
{
int a[SIZE];
}

如果包含多個(gè)數(shù)組的話,用宏就很難記憶,那么我們就可以利用sizeof運(yùn)算符。

int main (void)
{
int a[]={1,3,4,55,6,7,89,9,0};
int i ;
printf("%d",(int)sizeof(a)/(int)sizeof(a[0]));
for(i=0;i<(int)sizeof(a)/(int)sizeof(a[0]);i++)
{
a[i]=0;
}
for(i=0;i<(int)sizeof(a)/(int)sizeof(a[0]);i++)
{
printf("%d\n",a[i]);
}
}

注意,我們之前說過,sizeof返回的值是size_t,因此,我們?cè)谟?jì)算時(shí),最好將其先強(qiáng)制類型轉(zhuǎn)換為我們可以控制的類型。

2. 數(shù)組初始化

一般情況下,我們初始化數(shù)組都是把整數(shù)數(shù)組初始化為0,那么我們一般會(huì)怎么做呢?

#define SIZE 5

int main (void)
{
int a[SIZE]={0,0,0,0,0};
}

那么如過SIZE=100怎么辦,那么很多人都會(huì)這樣去做。

#define SIZE 100

int main (void)
{
int a[SIZE];
int i ;
for(i=0;i<SIZE;i++)
{
a[i]=0;
}
}

其實(shí)我們完全不用麻煩,這么一句代碼就可以搞定了。

#define SIZE 100

int main (void)
{
int a[SIZE]={0};
}

在C99中,提供了一種初始化式,使得我們可以這樣來寫。

#define SIZE 100

int main (void)
{
int a[SIZE]={[5]=100,[50]=49};
}

而其他的數(shù)字就都默認(rèn)為0。那么我們來考慮這樣一段代碼:

#define SIZE 10

int main (void)
{
int a[SIZE]={1,2,3,4,5,[0]=6,7,8};
}

那么在C99中,這段代碼的結(jié)果究竟是什么呢?這個(gè)就需要我們來了解一下數(shù)組初始化式的原理。

其實(shí),編譯器在初始化式數(shù)組列表時(shí),都會(huì)記錄下一個(gè)待初始化的元素的位置,比如說在初始化index=0的元素時(shí),會(huì)記錄下1,這樣以此類推,但是當(dāng)初始化index=5的時(shí)候,首先根據(jù)他的初始化式記錄下一個(gè)待初始化的元素時(shí)index=1,然后初始化 index=0的元素為6。那么也就是說:最后的結(jié)果應(yīng)該是{6,7,8,4,5,0,0,0,0,0}。

3. 常量數(shù)組

當(dāng)數(shù)組加上const就變成了常量數(shù)組,常量數(shù)組主要有兩個(gè)好處。

1. 告訴使用者,這個(gè)數(shù)組是不應(yīng)該被改變的。

2. 有助于編譯器發(fā)現(xiàn)錯(cuò)誤。

4. C99的變長(zhǎng)數(shù)組

這是個(gè)很爽的東西,我們?cè)僖膊槐負(fù)?dān)心為數(shù)組指定大小而發(fā)愁了,指定大了會(huì)造成空間的浪費(fèi),指定小了又不夠用。

在C99中,他的長(zhǎng)度會(huì)由程序執(zhí)行時(shí)進(jìn)行計(jì)算。

方式如下:

int main (void)
{
int size;
int a[size];
scanf("%d",&size);
}

5. 數(shù)組的復(fù)制

很多時(shí)候,我們需要把一個(gè)數(shù)組的元素復(fù)制到另一個(gè)數(shù)組上,我們大多數(shù)人第一個(gè)想到的就是循環(huán)復(fù)制。

#define SIZE 10

int main (void)
{
int a[SIZE];
int b[SIZE];
int i ;
for(i=0;i<SIZE;i++)
{
a[i]=i;
}
for(i=0;i<SIZE;i++)
{
b[i]=a[i];
}
for(i=0;i<SIZE;i++)
{
printf("%d",b[i]);
}
}

其實(shí)還有一種更好的方法是使用memcpy方法,這是一個(gè)底層函數(shù),它把內(nèi)存的字節(jié)從一個(gè)地方復(fù)制到另一個(gè)地方,效率更高。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 10

int main (void)
{
int a[SIZE];
int b[SIZE];
int i ;
for(i=0;i<SIZE;i++)
{
a[i]=i;
}
memcpy(b,a,sizeof(a));
for(i=0;i<SIZE;i++)
{
printf("%d",b[i]);
}
}

總結(jié)

以上是生活随笔為你收集整理的C语言学习笔记(4)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。