|
发表于 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;
}
你可以试下这个小程序 可以加深字符串和数组的理解
|
|