【c语言】字符指针、指针数组、数组指针、野指针和void*

字符指针与字符串:
char buf[100] = "hello";
char *s = "hello"; //把字符串的首地址存入s中*
*s = 'e';   	//error, 因为"hello"存放在字符串常量区, 所以不能修改
s = buf;   		//right, 因为s是变量,所以s可以修改
*s = 'e';   	//right, 因为s指向buf,现在改变的是buf中额内容
指针数组: 数组, 数组元素是指针的数组
int* a[5];   	//拥有5个int *类型(32位地址)的数组
char* a[10];	//拥有10个char *类型(32位地址)的数组
int a[3][4];
int* b[3] = {a[0], a[1], a[2]};	//a[0](int*类型) 为a[0][0]的地址
char* s[5] = {"Apple", "Orange", "Pear", "Peach", "Banana"};  //把字符串的首地址存入s数组中
数组指针: 指针, 指向数组的指针
int (*a)[4];   //a是一个指向拥有4个int元素数组的指针  --- a是一个指向一维数组的指针
char (*a)[100];	//指向拥有100个char元素数组的指针
int (*a)[4];//定义一个指针数组
int b[4] = {1234};  //b是一个拥有4个int元素的数组
a = &b;  //a是一个指向b的指针
int a[3][4];//定义二维数组
int (*p)[4] = a;  //&a[0]     
野指针: 没有初始化的指针
int *p = NULL;
*p = 100;  //error, 段错误, 非法访问内存
int a;
p = &a;  //right
*p = 100;
对于野指针, 需要赋给一片合法的空间才能使用
段错误出现的原因:非法访问内存
指针定义时 要避免野指针
void *:可以接收任意类型的地址, 需要强转成具体的类型才能使用
int a;
void *p = &a;
printf("%d\n", *(int*)p);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值