C程序设计Week10课上实例


1 一个神奇的程序

== 使用了 【指针】【强制类型转换】两项技术 或规则 ==

== 里面的地址可能需要重新写一下下 ==

#include "stdio.h"
main(){
	int a = 3;
	*((int*)0X18FF44) = 8;
	printf("%d\n",a);
}

2 变量review

== 该程序很简单,但确是最需要理解的 ==

#include "stdio.h"
main(){
	int a = 5;
	printf(" a = %d \n", a );
	printf(" size of a is %d\n", sizeof(a) );
	printf(" address of a is 0x%x\n", &a );
}

3  一个错误的程序

== 想想为什么 ==

#include "stdio.h"
void main(){
	int * a;
	*a = 10;
	printf(" dereference of a is %d\n",*a);
}

4 数组的另类理解

== int a[4] ==

== a的内容是什么?a的大小是多少 ?==

== 认真体会 ==

#include "stdio.h"

void pz(int arr[]){
	printf("size function: %d\n",sizeof(arr));
}
void main(){
	int a[]={1,2,3};
	printf("a=0x%x \n",a);
	printf("sizeof a is %d \n",sizeof(a));
	pz(a);
}

5 指针与数组

== 两个知识点 【指针指向数组】【指针加上一个整数】==

#include "stdio.h"
#define SIZE 4
main(){
	short index;
	short dates[SIZE];
	short *pti=dates; // pointer to integer
	double bills[SIZE];
	double *ptf=bills; // pointer to float 
	printf("%20s(%dB) %10s(%dB)\n",
	   "short",sizeof(short),"double",sizeof(double));	
	for( index = 0 ; index < SIZE ; index ++ )
		printf("pointers + %d: %10p %10p\n",
			    index, pti+index, ptf+index );
}

另一个例子

#include "stdio.h"
void main(){
	int a[]={10,3,9,7};
	for(int i=0;i<sizeof(a)/sizeof(int);i++)
		printf("the value of a+%d : %d\n",i,*(a+i));

	int *pa1,*pa2,*pa3;
	pa1 = a;
	pa2 = a+2;
	pa3 = &a[3];
	printf("*pa1=%d,*pa2=%d,*pa3=%d\n",*pa1,*pa2,*pa3);
	printf("pa1=%p,pa2=%p,pa3=%p\n",pa1,pa2,pa3);
	printf("pa2-pa1 = %d\n",pa2-pa1);	
}

6 理解函数中的传值、传地址

#include "stdio.h"
void change(int a){
	a=2;
}
void main(){
	int a=1;
	change(a);
	printf("a is %d\n",a);
}

#include "stdio.h"
void change(int* pa){
	*pa=2;
}
void main(){
	int a = 1;
	int* pa= &a;
	change(pa);
	printf("*pa is %d\n",*pa);
}

7 当函数的参数为指针、为数组时

#include "stdio.h"
void changeArray(int ar[]){
	ar[1] = 88;
}
void changePointer(int *pa){
	*(pa+2) = 101;
}
void main(){
	int a[]={1,2,3};
	changeArray(a);
	changePointer(a);
	for(int i=0;i<sizeof(a)/sizeof(int);i++)
		printf("a[%d]=%d\n",i,a[i]);
}

8 指向函数的指针

#include "stdio.h"
void welcomeToBaoding(){
	printf("welcome to Baoding\n");
}
void welcomeToXiAn(){
	printf("welcome to XiAn\n");
}
void main(){
	void (*welcome)();
	welcome = welcomeToBaoding;
	welcome();
	welcome = welcomeToXiAn;
	welcome();
}

9 利用指针动态分配内存

#include "stdio.h"
#include "stdlib.h"
void main(){
	int length ,i;
	int *p;
	printf("input the num :");
	scanf("%d",&length);
	p = (int*) malloc(length*sizeof(int));
	*p=1;
	*(p+1)=1;
	for(i =2;i<length;i++)
		*(p+i) = *(p+i-2) + *(p+i-1);
	for(i = 0;i<length;i++)
		printf("fabonacci of %d is %d\n",i,*(p+i));
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值