2.10一级指针初识


【注:自己从老师讲解出理解的,不对的地方望指正】

【注:本程序验证是使用vs2013版】

刚学c的一句话:独学而无友,孤陋而寡闻

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996)
int main(void){
    /*
        1.指针是一种数据类型,是指它指向的内存空间的数据类型。
        2.初始化的指针是一个变量,是变量的话内存就需要给这个变量存放的地方,有了存放的地方就有地址。
        3.指针的地址:存放地方的地址。
        4.指针的指向:存放指针的地方。
        5.指针指向内容:内存中的其他内存块。
        6.编译器对待指针和一般变量是一样的处理方法。
        7.不允许向NULL、未知、非法 地址拷贝内容。
        8.void类型的指针。
    */

    /*1查询指针的长度*/
    int *p = NULL;
    char ************q = NULL;
    printf("sizeof(p)=%d\nsizeof(q)=%d\n", sizeof(p), sizeof(q)); //指针长度是4个字节(32位编译器)
  
/*2~5指针地址、指针指向、指针指向内容*/ int x = 10; int *a = &x; //创建变量a,这个变量是指针变量(不要老想着将*a 连在一起),这个变量指向了变量x的地址 printf("&a: %p\n",&a); // a的地址 ( &a:取a变量的地址) printf("a:%p\n", a); // a的指向 (其实就是x的地址,不过是存放在a变量内部的) printf("*a: %d\n",*a); // a的指向内容 (*:取出该地址内部的内容) printf("&x:%p\n",&x); //x的地址,跟a的值对比,相同
/* 6指针变量跟其它变量 --这里将普通变量当成指针变量来使用,其结果跟指针变量的结果是相同的; --对于操作地址而言:这里的结论是指针变量比普通变量操作地址方便无无数倍,这就是指针变量存在的意义 --普通变量当成指针:地址是4位的,32位机器上int类型的值也占4位,将y的地址赋值给c,将c强制转换为指针类型,来取指针指向的内容 */ int y = 10; int *b = &y; //定义 指针变量b存放y的地址 printf("b = %p\n",b); //b变量内部存放的:y的地址 printf("*b = %d\n",*b); //b的指向内容:y的值10 int c = (int)(&y); //定义 普通变量c存放y的地址 printf("c = %p\n",c); //c变量内部存放的:y的地址 printf("*c = %d\n", *(int *)c);//c的指向内容:y的值10
/*7.0不允许向NULL、未知 地址拷贝内容*/ char *d = NULL; //strcpy(d,"111"); //报错
//7.1不允许向非法 地址拷贝内容 int z = 10; int *e = 1;//1是非法地址(1这个内存地址一般不是用来存放变量地址的) e = &z; printf("e=%d\n", e); printf("*e=%d\n", *e);//一般不这样使用
/*8 void *类型的使用,需要转换为实际类型指针*/ int w = 10; void *f; f = &(int *)w; //转换为实际类型的指针(这里可以不转换为实际类型) printf(" f = %d\n", f); printf("*f = %d\n", *(int *)f); //转换为实际类型的指针(这里必须转换为实际类型)

printf("\n"); system("pause"); return 0; }

猜你喜欢

转载自www.cnblogs.com/wlstm/p/11080620.html