c语言把结构体首地址放入指针,C语言基础———指针,结构体指针,函数指针

指针基础

一 指针就是地址,地址就是指针.指针存储的是内存的地址.

二 指针的定义

1.&表示取址运算符,&a 可以取到 a 在内存中的地址;打印地址的占位符为(%p),printf(“%p\n”,&a);

2. 指针变量的定义

指针变量是用来存放地址的.

指针定义的格式:

类型数据  *变量名  =  初始值;

int *p = NULL;*在这里表示p 是一个指针变量,不是运算符.

printf(“%p\n”,p); 在打印指针的时候不需要使用取址运算符(&),因为指针本来就是地址.

*p 指针为空时,打印出来0x0的地址,为空.

int  a = 10;

p = &a;

printf(“%p\n”,p);

访问内存中的数据有两种方法:

1.直接访问内存中的数据.

printf(“%p\n”,a);

2. 通过指针进行访问.

*也可以作为取值运算符.* p 代表取到 p 指向内存中存储的数据  printf(“%d\n”,*p);

int a = 10,b = 20;

int *p1 = &a;

int *p2 = &b;

对指针重新赋值,意味着指针重指向,也就是说指针指向一个新的地址.

p1 = p2;p1指向 c 的首地址

printf(“*p1 = %d,* p2 = %d\n”,*p1,*p2);

int a = 15,b = 20;

int *p = &a;

int *p1 = &b;

单独的* p 表示取值,* p = 11 表示向 p 指向的内存中存入数据.

*p = 11;

printf(“%d\n”,a);

int *p3 = &a;

p3 = p1;

*p1 = 8;

printf(“a = %d,b = %d\n”,a,b);a = 11,b = 8

经典练习

int a = 6,b = 8,c = 10;

int *x = &a;

x = &c;

int *y = &b;

int *z = &c;

*z = 5;

*x = 12;

x = y;

*y = *x + *z;

printf(“a = %d,b = %d,c = %d\n”,a,b,c);

指针中常见的问题

1.内存编号比较小的存储单元,是由系统控制的,不允许访问.

int *p = NULL;

*p = 100;   error

2.野指针,定义时没有赋初始值,操作野指针是很危险的

int *p;

*p = 100;error

3.定义指针时,*怎么写?

int *p = NULL;推荐

int* p1 = NULL;

int *p1 = NULL;

int*p3 = NULL;

4.指针变量在内存中占几个字节

与数据类型无关,在32位操作系统下,指针所占字节数是4位,在64位操作系统中,指针所占字节数是8位.

printf(“%lu\n”,sizeof(long *));

5. 修饰指针变量数据类型的作用

a. 指针变量数据类型,决定*(取值运算符),取多少个字节的数据;

定义指针的数据类型一定

你可能感兴趣的:(c语言把结构体首地址放入指针)