C语言_指针

2019-08-04  本文已影响0人  书虫大王X

1.定义指针:

int c = 10;
float b = 3;
int *a1 = &c;//正确
int *a2 = &b;//错误;指针只能与之对应的类型的数据的地址
int  *a3 = c;//错误;指针变量只能存地址 不能存具体值
//‘&’ 取某个变量的地址

2.除了定义指针变量时,其余时候指针都是访问某个地址的值,例:

 int c= 20;
 int *temp = &c;//定义指针变量
 *temp = 21; //访问temp地址里面的数据 赋值为20

3.关于指针的小知识点:

a.指针变量的值是一个地址, 这个地址不仅可以是变量的地址, 也可以是其它数据结构的地址,例:

//数组指针:
int a2[10] = {};
int *pa2 = a2;

//函数指针:
int(*pFunc)(int) = test;

int test(int a){
    return 0;
}

b.另外,指针在定义时必须赋予初值,如果初值不确定,则赋值为NULL。(NULL指向内存的起始地址)
c.指针变量本身在内存里面占据8个字节内存空间。

4.指针与数组的关系:

数组名并不是一个变量 ,系统没有分配内存空间(数组名表示数组第一个元素的地址) ;
而指针变量是有内存空间的。
在使用时的差异:

int score[5] = {39,32,87,58,27};
    for (int i = 0; i < 5; i++) {
        printf("%d ",score[i]);
    }
    for (int i = 0; i < 5; i++) {
        printf("%d ", *(score + i));
    }

5.练习:

    int a = 10;
    int *pa = &a;
    
    int a2[10] = {};
    int *pa2 = a2;
    
    char c = 'a';
    char *pc = &c;
    
    printf("%lu\n",sizeof(a)); //内存里面占据4个字节内存空间
    printf("%lu\n",sizeof(pa));//内存里面占据8个字节内存空间
    printf("%lu\n",sizeof(a2));//内存里面占据40个字节内存空间
    printf("%lu\n",sizeof(pa2));//内存里面占据8个字节内存空间


    int score[5] = {39,32,87,58,27};
    printf("%p\n", score); //打印地址:0x7ffeefbff4d0
    printf("%p\n", score+1);//打印地址:0x7ffeefbff4d4(score+1 = 0x100 + 1 * 4 = 0x104)
    printf("%d\n", *(score+1));//打印结果:32
    printf("%d\n", *score+1);//打印结果:40

一个小坑:

    int score2[5] = {39,32,87,58,27};
    printf("%d\n", (*score2)++); //打印结果:39 
    printf("%d\n", score2[0]); //打印结果:40(注意:不是39;上一个语句执行完,已经加1)
    printf("%d\n", ++*score2); //打印结果:40 
上一篇 下一篇

猜你喜欢

热点阅读