C语言指针与函数案例,C中数组,函数和指针的几个例子

在C中这里有我们常用的指针,数组及函数了,这些东西其实我们就是使用了书上的内容自己理解一番,做个连贯的笔记罢了,希望这些例子对各位理解数组,函数和指针会有所帮助。

例子

 代码如下复制代码

#include

#define SIZE 4

int main(void)

{

short dates[SIZE];

short * pti;

short index;

double bills[SIZE];

double * ptf;

pti = dates;

ptf = bills;

printf("#s sn", "short", "double");

for (index = 0; index < SIZE; index )

printf("pointers %d: p pn", index, pti index, ptf index);

return 0;

}

首先:

在C中,对一个指针加1的结果就是对该指针增加一个储存单元,对鼠族而言,地址会增加到下一个元素的地址,而不是下一个字节。

于是乎,我们可以看到他的地址被输出了:

 代码如下复制代码

short double

pointers 0: 0028FF0C 0028FEE8

pointers 1: 0028FF0E 0028FEF0

pointers 2: 0028FF10 0028FEF8

pointers 3: 0028FF12 0028FF00

关于为何不同,其实是因为short和double占的字节数是不一样的。(short使用两个字节,double则是八个)

* (dates 2)与*dates 2并不同,因为*的优先级高于*,所以会优先运算,相当于对dates当前指向的值加了2.

再来看看另一个:

 代码如下复制代码

#include

#define MONTHS 12

int main(void)

{

int days[MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int index;

for (index = 0; index < MONTHS; index )

printf("Month - has %d days.n", index 1, * (days index));

return 0;

}

可以看到* (days index)其实和days[index]是一个效果的。

在函数中,我们可以这么传入数组int sum(int * ar),但是这样只能得到首元素的地址,却不知道数组个数(自然我们能把数组个数当成第二个参数传入),还可用int ar[]代替,这是指向数组的指针,是一个指针(因为重要所以说两遍),为什么强调这一点,看这个程序就知道了:

 代码如下复制代码

#include

#define SIZE 10

int sum(int ar[], int n);

int main(void)

{

int marbles[SIZE] = {20, 10, 5, 39, 4, 16, 19, 26, 31, 20};

long answer;

answer = sum(marbles, SIZE);

printf("The total number of marbles is %ld.n", answer);

printf("The size of marbles is %lu bytes.n", sizeof marbles);

return 0;

}

int sum(int ar[], int n)

{

int i;

int total = 0;

for (i = 0; i < n; i )

total = ar[i];

printf("Te size of ar is %lu bytes.n", sizeof ar);

return total;

}

来看看输出:

Te size of ar is 4 bytes.

The total number of marbles is 190.

The size of marbles is 40 bytes.

调用函数的时候输出的是4,这是因为函数内,它并非是一个数组,只是一个int类型的指针,int类型为4个字节,而在main中,数组本身由10个int类型的数组成,所以是40。

请随时记得:* (days index)其实和days[index]是一个效果的

除了指定数组大小外,还有什么办法指定:

 代码如下复制代码

#include

#define SIZE 10

int sump(int * start, int * end);

int main(void)

{

int marbles[SIZE] = {20, 10, 5, 39, 4, 16, 19, 26, 31, 20};

long answer;

answer = sump(marbles, marbles SIZE);

printf("The total number of marbles is %ld.n", answer);

return 0;

}

int sump(int * start, int * end)

{

int total = 0;

while (start < end)

{

total = *start;

start ;

}

return total;

}

答案是一样的,因为索引从0开始,所以marbles SIZE指向数组结尾后下一个元素(再往后结果是未知的)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值