T1(选择题)
选择A
A选项:为PA地址的值,此时Pa的地址指向a[0]
B选项: 为a加一的地址的数值,即为a[1]的值
C选项:为pa地址加一的地址,此时pa的地址和a[0]相同,所以为a[1]的值
D选项:为a[1]的值
T2(填空题)
输出6 2 3 4 5(有个空格)
#include <stdio.h>
void fun(int *p,int n)
{
int i;
for(i=0;i<n;i++)
{
(*p)++;
}
}
int main()
{
int a[5]={1,2,3,4,5},i;
fun(a,5);
for(i=0;i<5;i++)
printf("%d",a[i]);
return 0;
}
fun函数调用,数组的首地址代入进去,*P取地址的值为1,for循环5次,(*p)++5次,a[0]就变为了6,也就是数组首地址的指向了6
T3
选择B
首先了解到p是指向一个地址,
A选项中p是指向一个变量的值而不是地址
B选项中是指向一个地址,正确的
C选项中p指向value链表的值,也是个数值
D选项指向的是p[0],是数组的第一个值
T4
*p输出为5
*p=&a[2]+1;
*p指向了数组第三个值(4),然后加一,所以为5
T5
选择B
A选项:正确,函数调用为数组首地址与数组名字的地址是相同的
B选项:f(p,n)该函数调用的p不是一个值,不合法
C选项:形参是函数的地址,所以两个函数中的数组是同一个
D选项:正确
T6
#include <stdio.h>
int main()
{
int a[]={10,9,8,7,6,5,4,3,2,1};
int *p;
p=a;
printf("%p,%p,%p,%p,%d,%d\n",a,&a,p,p+9,*p+9,*(p+9));
return 0;
}
第一个值输出为数组首地址
第二个也是数组首地址(数组名字与&a相同)
第三个为p=a后p的地址
第四个为p+9的地址
第五个为* p(为数组a首地址的值,即10)然后加上9,输出为19
第六个为* (p+9) 既数组a第十个数的地址存放的值
就是a[9],就是1
T7
void swap1 (double *p,double *q){
double* temp = p;
p = q;
q = temp;
}
void swap2 (double *p,double *q){
double temp = *p;
*p = *q;
*q = temp;
}
T8
#include<stdio.h>
void bubble_sort(float *a,int n)
{
int i,j;
for(i = 0;i<n;i++)
{
for(j = i;j < n;j++)
{
if(*(a+i)>*(a+j))
{
float temp;
temp = *(a+i);
*(a+i) = *(a+j);
*(a+j) = temp;
}
}
}
}
int main()
{
float a[5];
int i;
for(i = 0;i < 5;i++)
{
scanf("%f",&a[i]);
}
bubble_sort(a,5);
for(i = 0;i < 5;i++)
{
printf("%.2f ",*(a+i));
}
return 0;
}
1.主函数输入数组的值
2.调用函数,将数组的地址调用给函数
3,用地址的大小进行判断,如果后一个比前一个大则二者的地址直接交换,就不用交换值了
4,最后输入即可