week 10 的遗留问题

C程序设计Week10课上实例

分类: C课程 65人阅读 评论(0) 收藏 举报


1 一个神奇的程序

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

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

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

2 变量review

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

  1. #include "stdio.h"   
  2. main(){  
  3.     int a = 5;  
  4.     printf(" a = %d \n", a );  
  5.     printf(" size of a is %d\n"sizeof(a) );  
  6.     printf(" address of a is 0x%x\n", &a );  
  7. }  
#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  一个错误的程序

== 想想为什么 ==

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

4 数组的另类理解

== int a[4] ==

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

== 认真体会 ==

  1. #include "stdio.h"   
  2.   
  3. void pz(int arr[]){  
  4.     printf("size function: %d\n",sizeof(arr));  
  5. }  
  6. void main(){  
  7.     int a[]={1,2,3};  
  8.     printf("a=0x%x \n",a);  
  9.     printf("sizeof a is %d \n",sizeof(a));  
  10.     pz(a);  
  11. }  
#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 指针与数组

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

  1. #include "stdio.h"   
  2. #define SIZE 4   
  3. main(){  
  4.     short index;  
  5.     short dates[SIZE];  
  6.     short *pti=dates; // pointer to integer   
  7.     double bills[SIZE];  
  8.     double *ptf=bills; // pointer to float    
  9.     printf("%20s(%dB) %10s(%dB)\n",  
  10.        "short",sizeof(short),"double",sizeof(double));    
  11.     for( index = 0 ; index < SIZE ; index ++ )  
  12.         printf("pointers + %d: %10p %10p\n",  
  13.                 index, pti+index, ptf+index );  
  14. }  
#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 );
}

另一个例子

  1. #include "stdio.h"   
  2. void main(){  
  3.     int a[]={10,3,9,7};  
  4.     for(int i=0;i<sizeof(a)/sizeof(int);i++)  
  5.         printf("the value of a+%d : %d\n",i,*(a+i));  
  6.   
  7.     int *pa1,*pa2,*pa3;  
  8.     pa1 = a;  
  9.     pa2 = a+2;  
  10.     pa3 = &a[3];  
  11.     printf("*pa1=%d,*pa2=%d,*pa3=%d\n",*pa1,*pa2,*pa3);  
  12.     printf("pa1=%p,pa2=%p,pa3=%p\n",pa1,pa2,pa3);  
  13.     printf("pa2-pa1 = %d\n",pa2-pa1);     
  14. }  
#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 理解函数中的传值、传地址

  1. #include "stdio.h"   
  2. void change(int a){  
  3.     a=2;  
  4. }  
  5. void main(){  
  6.     int a=1;  
  7.     change(a);  
  8.     printf("a is %d\n",a);  
  9. }  
#include "stdio.h"
void change(int a){
	a=2;
}
void main(){
	int a=1;
	change(a);
	printf("a is %d\n",a);
}

  1. #include "stdio.h"   
  2. void change(int* pa){  
  3.     *pa=2;  
  4. }  
  5. void main(){  
  6.     int a = 1;  
  7.     int* pa= &a;  
  8.     change(pa);  
  9.     printf("*pa is %d\n",*pa);  
  10. }  
#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 当函数的参数为指针、为数组时

  1. #include "stdio.h"   
  2. void changeArray(int ar[]){  
  3.     ar[1] = 88;  
  4. }  
  5. void changePointer(int *pa){  
  6.     *(pa+2) = 101;  
  7. }  
  8. void main(){  
  9.     int a[]={1,2,3};  
  10.     changeArray(a);  
  11.     changePointer(a);  
  12.     for(int i=0;i<sizeof(a)/sizeof(int);i++)  
  13.         printf("a[%d]=%d\n",i,a[i]);  
  14. }  
#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 指向函数的指针

  1. #include "stdio.h"   
  2. void welcomeToBaoding(){  
  3.     printf("welcome to Baoding\n");  
  4. }  
  5. void welcomeToXiAn(){  
  6.     printf("welcome to XiAn\n");  
  7. }  
  8. void main(){  
  9.     void (*welcome)();  
  10.     welcome = welcomeToBaoding;  
  11.     welcome();  
  12.     welcome = welcomeToXiAn;  
  13.     welcome();  
  14. }  
#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 利用指针动态分配内存

  1. #include "stdio.h"   
  2. #include "stdlib.h"   
  3. void main(){  
  4.     int length ,i;  
  5.     int *p;  
  6.     printf("input the num :");  
  7.     scanf("%d",&length);  
  8.     p = (int*) malloc(length*sizeof(int));  
  9.     *p=1;  
  10.     *(p+1)=1;  
  11.     for(i =2;i<length;i++)  
  12.         *(p+i) = *(p+i-2) + *(p+i-1);  
  13.     for(i = 0;i<length;i++)  
  14.         printf("fabonacci of %d is %d\n",i,*(p+i));  
  15. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值