鱼C论坛

 找回密码
 立即注册
查看: 2446|回复: 3

指针使用必须要初始化赋值?求大神详解。

[复制链接]
发表于 2014-10-9 09:35:44 | 显示全部楼层
指针并不是一定要初始化的 ,只是如果你要操作它所指向的内存时,你一定要保证它指向的内容有意义 。
指针本身 和 指针指向的内存时两回事。
#include <stdio.h>
int main(void)
{
int *a;
*a = 10;
printf("%d\n",*a);
return 0;
}
#include <stdio.h>
int main(void)
{
int *a, b;
a = &b;
*a = 10;
printf("%d\n",*a);
return 0;
}
这两处 因为要向a所指的内存写入值 所以一定要指向合法的内存 也就是你所说的初始化赋值了即将a指向一段合法的内存,否则a指向的内存将指向一段无意义的内存 a就变成了著名的“野指针”、

#include <stdio.h>
int main(void)
{
char *s[2];  
s[0] = "你";
s[1] = "好!";
printf("%s%s\n",s[0],s[1]);  
return 0;
}
这里因为是char*数组 每个元素就是char* ,"你"“好”是两个常量字符串 当作为右值时就是地址
int main(void)
{
int *a;
int x[2] = {10,20};
a = x;  
printf("%d\n",*a);
return 0;
}
首先 x 是不等价&x[0]的 他们只是值上相等而已意义是不同的 要切记类型的概念在C中是很特殊的
x是指向2*sizeof(int)个字节的内存 而&x[0]是指向sizeof(int)个字节大小的内存
然后所谓的初始化就是在定义变量之后赋值 这里a = x就是对a进行初始化
而x是一个常量在数值上就等于数组首元素的地址 是不能对x进行赋值的
但是可以对x指向的内容进行赋值 即对数组的元素赋值

总结一下指针记住几点
1. 理清楚指针本身 和 指针指向的内存之间的关系
2. 指针的类型和指针指向的类型
3. 字符串和数组 与指针的联系
int main(int argc, char* argv[])
{
        printf("%c\n","hello world"[3]);
        return 0;
}
你可以试下这个小程序 可以加深字符串和数组的理解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-7 03:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表