week 10 的遗留问题
2014-05-08 17:31
441 查看
C程序设计Week10课上实例
分类:C课程 2014-05-06 16:28
65人阅读
评论(0)
收藏
举报
目录(?)[+]
一个神奇的程序
变量review
一个错误的程序
数组的另类理解
指针与数组
理解函数中的传值传地址
当函数的参数为指针为数组时
指向函数的指针
利用指针动态分配内存
1 一个神奇的程序
== 使用了 【指针】【强制类型转换】两项技术 或规则 ==== 里面的地址可能需要重新写一下下 ==
[cpp]
view plaincopyprint?
#include "stdio.h"
main(){
int a = 3;
*((int*)0X18FF44) = 8;
printf("%d\n",a);
}
#include "stdio.h" main(){ int a = 3; *((int*)0X18FF44) = 8; printf("%d\n",a); }
2 变量review
== 该程序很简单,但确是最需要理解的 ==[cpp]
view plaincopyprint?
#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 );
}
#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 一个错误的程序
== 想想为什么 ==[cpp]
view plaincopyprint?
#include "stdio.h"
void main(){
int * a;
*a = 10;
printf(" dereference of a is %d\n",*a);
}
#include "stdio.h" void main(){ int * a; *a = 10; printf(" dereference of a is %d\n",*a); }
4 数组的另类理解
== int a[4] ==== a的内容是什么?a的大小是多少 ?==
== 认真体会 ==
[cpp]
view plaincopyprint?
#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);
}
#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 指针与数组
== 两个知识点 【指针指向数组】【指针加上一个整数】==[cpp]
view plaincopyprint?
#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" #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 ); }
另一个例子
[cpp]
view plaincopyprint?
#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);
}
#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 理解函数中的传值、传地址
[cpp]view plaincopyprint?
#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 a){ a=2; } void main(){ int a=1; change(a); printf("a is %d\n",a); }
[cpp]
view plaincopyprint?
#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);
}
#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 当函数的参数为指针、为数组时
[cpp]view plaincopyprint?
#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]);
}
#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 指向函数的指针
[cpp]view plaincopyprint?
#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();
}
#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 利用指针动态分配内存
[cpp]view plaincopyprint?
#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));
}
相关文章推荐
- 常用的电脑快捷键大全
- 私人定制!13个在线纹理生成资源网站
- delphi文件管理类函数
- 企业邮箱服务优化软件
- 使用内部(com.android.internal)和隐藏(@hide)API[第1部分,介绍]
- Android 自定义Adapter实现多视图Item的ListView
- Jquery.ajax学习笔记
- 旺旺老师JavaSE基础第二章(01)IDE工具
- WindowsXP下搭建GIT服务器
- Linux netstat命令详解
- c字符串逆序
- C4.5算法的分析和实现
- 新的开始
- 常用判断
- virtual 修饰符与继承对析构函数的影响(C++)
- jQ confirm确认对话框
- 2014省赛大总结(一) DFS 与 BFS
- 自定义控件:SlidingUpPanelLayout
- i386 错误
- fstream,ifstream,ofstream 详解与用法