指针的大小与类型没有关系, 都是四字节。
int *p :int * 表示指针类型, 这是一个int 类型的指针
chr *p: chr * 表示是字符类型的指针
#include<stdio.h> int main (void) { printf("int * %d \n" , sizeof(int *)); printf("float * %d \n", sizeof(float *)); printf("double * %d \n", sizeof(double *)); printf("long * %d \n", sizeof(long *)); printf("char * %d \n", sizeof(char *)); printf("long long * %d \n", sizeof(long long *)); } int * 8 float * 8 double * 8 long * 8 char * 8 long long * 8
野指针:
#include<stdio.h> int main (void) { // 野指针 int *p ; //只声明, 但是没有定义, 编译器自动赋值随机数 *p = 200; printf("the *p is %d", *p); }
这样是不行的, 指针p 所指向的地址是随机数, 没办法给其赋值200
#include<stdio.h> int main (void) { // 野指针 int *p = 10; // 0 -255 是操作系统所用的内存地址, 不行使用的。 *p = 350; printf("*p value is %d", *p); }
指针地址是不能使用的, 所以这样也是不行的
综上, 杜绝使用野指针
#include<stdio.h> int main (void) { // 空指针 int *p = NULL; // NULL == 0 if (p != NULL) { *p = 300; } printf("*p value is %d", *p); }
泛型指针
#include<stdio.h> int main (void) { void *p; int a = 10; p = &a; printf ("* p is %d", *(int*)p); // (int*) 强制类型转换成int* 型指针,(括号表示的是强制类型转换 ) } * p is 10