指针练习习题

指针练习习题

1、

int ref[] = {8,4,0,2};

​ ref是8的地址,ref+1是4的地址,而++ref不是合法的C表达式,因为ref是常量而不是变量。

2、

//一个包含20个指向char的指针的数组
char *psa[20]
//一个指向数组的指针,其中数组由20个char值构成
char (**pstr)[20]

3、定义一个包含100个int值的数组并且初始化它,使它的末元素为-1,其他元素的值不考虑

int lots[100] = {[99]=-1}

4、

int *ptr;
float value = 2.2;
ptr = value;

该表达是错误的,因为value并不是一个地址。

5、编写一个函数,返回一个int数组中存储的最大数值

#include<stdio.h>

int a(int b[],int n)
{
	int i,max;
	max = b[0];
	for(i=0;i<n;i++)
      {
	    if(b[i]>max)
         max = b[i];
      }
    return max;
}

int main()
{
int i,n;
int b[100];
scanf("%d",&n);
for(i=0;i<n;i++)
 {
   scanf("%d",&b[i]);
 }
printf("%d\n",a(b,n));
return 0;
}

6、编写一个函数,将两个数组内对应的元素相加,然后存储到第三个数组。

#include<stdio.h>

#define    SIZE     4

int a(int b[],int c[],int d[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		d[i] = b[i] + c[i];
	}
	return;
}

int main()
{
	int b[SIZE] = {1,2,3,4};
	int c[SIZE] = {1,2,3,4};
	int d[SIZE] = {1,2,3,4};
	a(b,c,d,SIZE);
	
	int i;
	for(i=0;i<SIZE;i++)
	{
		printf("%d\n",d[i]);
	}
    return 0;
}

7、编写一个程序, 初始化一个double类型的数组, 然后把该数组的内容拷贝至3个其他数组中(在main()中声明这4个数组) 。 使用带数组表示法的函数进行第1份拷贝。 使用带指针表示法和指针递增的函数进行第2份拷贝。把目标数组名、 源数组名和待拷贝的元素个数作为前两个函数的参数。 第3个函数以目标数组名、 源数组名和指向源数组最后一个元素后面的元素的指针。 也就是说, 给定以下声明, 则函数调用如下所示:
double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
double target1[5];
double target2[5];
double target3[5];
copy_arr(target1, source, 5);
copy_ptr(target2, source, 5);
copy_ptrs(target3, source, source + 5);

#include<stdio.h>
#define SIZE 5
void copy_arr(double t[], double s[], int n);
void copy_ptr(double *pt, double *ps, int n);
void copy_ptrs(double *pt, double *ps, double *end);
int main(void)
{
        double source[SIZE] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
        double target1[SIZE], target2[SIZE], target3[SIZE];

        printf("target1:\n");
        copy_arr(target1, source, SIZE);
        printf("target2:\n");
        copy_ptr(target2, source, SIZE);
        printf("target3:\n");
        copy_ptrs(target3, source, source + SIZE);

        return 0;
}

void copy_arr(double t[], double s[], int n)
{
        int i;
        for (i = 0; i < n; i++)
        {
                t[i] = s[i];
                printf("%g\t", t[i]);
        }
        putchar('\n');
        return;
}

void copy_ptr(double *pt, double *ps, int n)
{
        int i;
        for (i = 0; i < n; i++)
        {
                *pt = *ps;
                printf("%g\t", *ps);
                pt++;
                ps++;
        }
        putchar('\n');
        return;
}

void copy_ptrs(double *pt, double *ps, double *end)
{
        while (ps < end)
        {
                *pt = *ps;
                printf("%g\t", *ps);
                pt++;
                ps++;
        }
        putchar('\n');
        return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值