指针练习习题
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;
}