我最近在回顾一篇关于指针的优秀、高度赞扬的文章:理解指针的障碍是什么,可以做些什么来克服它们? 当我阅读它时,我开始理解指针是什么。不幸的是,我仍然无法使用它们。
原因如下:我不懂命名!或者是指针的应用。在阅读了几本'so-you-want-to-learn-c'的书籍和文章后,我一次又一次地遇到了类似的代码:“如何创建和实例化指针”。
回答时,请使用示例代码来演示在实践中指针输出的内容。
这是代码:
char ch = 'c';
char *chptr = &ch;
或者,也许更令人困惑:
char ch = 'c';
char *chptr;
chptr = &ch;
请注意,chptr
它的命名与其他两个变量不同,它们名为ch
。为什么不命名所有三个变量ch
?给指针起一个不同的名字能解决什么问题?
此外,在我们的第一段代码中...*chptr = &ch;
;在第二个,chptr = &ch;
。是什么使得在第二个块中删除星号是可以接受的?
接下来,我想知道指针的应用是什么。我是否总是需要一个指针(什么时候需要,什么时候不需要)?提交答案后,我感到自信——相信我将能够理解使用指针的更复杂的代码——足以继续直观地适应语言。不过,我仍然充满好奇。
以这段代码为例:
typdef struct person
{
char *name;
int age;
}
为什么将 name 声明为指向不存在的 name 变量的指针,为什么将 age 变量声明为 int 而不使用指针?由于这个块,这没有意义:
int main()
{
/* below, the int is a pointer */
int *p;
void *up;
return 0;
}
或者这个块:
char *sp;
sp = "Hello";
printf("%s",sp);
我认为指针指向一个地址。“你好”不是地址。
考虑到前面的两个块,看看最后一个块:
int main()
{
int i,j;
int *p;
i = 5;
p = &i;
j = *p; //j = i?
&p = 7; //i = 7?
}
不应该将 j 设置为 &i 因为*p = &i
not i
。并且不应该&p = 7
将p的地址设置为7,这可能不是i?