week 10 课上实例

C程序设计Week10课上实例
分类: C课程 2014-05-06 16:28 88人阅读 评论(0) 收藏 举报
目录(?)[+]

1 一个神奇的程序
== 使用了 【指针】【强制类型转换】两项技术 或规则 == 
== 里面的地址可能需要重新写一下下 ==
[cpp] view plaincopy
#include "stdio.h"  
main(){  
    int a = 3;  
    *((int*)0X18FF44) = 8;  
    printf("%d\n",a);  
}  

2 变量review
== 该程序很简单,但确是最需要理解的 ==
[cpp] view plaincopy
#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 plaincopy
#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 plaincopy
#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 plaincopy
#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 plaincopy
#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 plaincopy
#include "stdio.h"  
void change(int a){  
    a=2;  
}  
void main(){  
    int a=1;  
    change(a);  
    printf("a is %d\n",a);  
}  

[cpp] view plaincopy
#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 plaincopy
#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 plaincopy
#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 plaincopy
#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));  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值