SCAU高级语言程序设计--实验10 指针与结构体(2)

SCAU高级语言程序设计--实验10 指针与结构体(2)

二、堂下练习

1、字符串与指针

题目:

请写出下列程序的运行结果

#include
int main( )
{   char   string[30]="How_are_you" ;
    char   *p=&string[0],*p2=string+8;
    printf("%s,%s\n" , p , p2 ) ;
}
 
程序运行结果为:

#include  

int main() 
{ 
    printf("_______________________"); 
} 

结果为:How_are_you,you

分析:这部分比较难,可以参考书P189

*p记录了整个字符串的首地址。

*p2记录了stirng[8]的地址。

 

2、数组中的指针

题目:设有如下数组定义: int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 计算下面各项的值(设数组a的首地址为2000,一个int类型数占四个字节)。

(1)a[2][1]		(2)a[1]		(3)a			(4)a+1
(5)*a+1		(6)*(a+1)	(7)a[2]+1		(8)*(a+1)+1
(9)*(*(a+2)+2) 

编写一个程序直接输出你的答案,一行一个。 

#include
int main(){
    printf("19\n");
    printf("2016\n");
    printf("2000\n");
    printf("2016\n");
    printf("2004\n");
    printf("2016\n");
    printf("2036\n");
    printf("2020\n");
    printf("21\n");
    return 0;
}

分析:(1)注意是从0开始的。a[0][0],不要看错了。

           (2)第二行的头地址,1个数4字节,4个数之后就16字节,所以2000+4*4=2016

           (3)整个数组的首地址2000

           (4)第二行的首地址,相当于a[1]

           (5)首地址+1,即a[0][1]的地址,2004

           (6)第二行的首地址,相当于a[1]

           (7)a[2][1]的地址,即2000+4*9=2036

           (8)首先,*(a+1)为第二行的首地址,然后再把这个地址+1,即a[1][1]的地址,2016+4=2020

           (9)*(a+2)为a[2][0]的地址,*(a+2)+2为a[2][2]的地址,*(*(a+2)+2)为a[2][2]的值为21.

你可能感兴趣的:(C语言)