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

二、堂下练习
1、字符串与指针
请写出下列程序的运行结果

#include<stdio.h>
int main( )
{   char   string[30]="How_are_you" ;
	char   *p=&string[0],   *p2=string+8;
    printf("%s,%s\n" , p , p2 ) ;
}
 

程序运行结果为:

#include <stdio.h>

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

思路:*p作为指针声明符号,表名p是指针变量。当把一个变量的地址或者指针首地址赋值给p变量时,表示p的指针变量指向这个值。字符串是读取到结束为止。

答案:How_are_you,you

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+15)*a+16)*(a+1)7)a[2]+18)*(a+1)+19)*((a+2)+2

答案:

#include<stdio.h>
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  3   5  7         00   01   02   03
9  11  13 15        10   11   12   13
17 19  21 23        20   21   22   231)a[2][1]的值
(2)a[1],代表第二行的首地址,2000+4*4=20163)a,代表a[0][0]的地址,20004)a+1,代表a[1][0]的地址,20165)*a+1,代表a[0][1]的地址,2000+4=20046)*(a+1)	,代表a[1][0]的地址,20167)a[2]+1	,代表a[2][0]的地址的下一位,即a[2][1]的地址,2000+4*9=20368)*(a+1)+1*(a+1)为第二行的首地址即a[1][0],然后再把这个地址+1,即a[1][1]的地址,2016+4=20209)*((a+2)+2,(a+2)为a[2][0]的地址,*(a+2)+2为a[2][2]的地址,最外面加*,为a[2][2]的值21.
发布了10 篇原创文章 · 获赞 1 · 访问量 190

猜你喜欢

转载自blog.csdn.net/weixin_39475542/article/details/105076845