您的位置:首页 > 其它

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));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: