【发布时间】:2020-11-26 20:38:03
【问题描述】:
目前我正在关注 C 指针上的 this pdf。下面的代码是为了演示,但让我难以置信。首先,我对数组指针的理解是,它们在堆内存中使用数组中第一个元素的内存地址进行初始化,因此为什么:ptr = &my_array[0]; /* and */ ptr = my_array; 是一回事。我对这段代码的第一个问题是他创建了一个不指向内存地址的指针。我认为指针初始化通常会涉及 & 并且 pA 的值将是数组第一个元素的内存地址,但是当他将指针打印到屏幕时,整个字符串都会打印出来。为什么?最重要的是,当我在 pA 上放另一个 * 时,它会打印数组的第一个字符。为什么?最重要的是,他在 *pA 和 *pB 上使用了 ++,这对我来说毫无意义,因为输出显示 *pA 是数组中的第一个字符而不是内存地址。
抱歉,这个概念让我难以理解。 PDF 只是不善于解释指针还是我严重误解了某些东西?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char strA[80] = "A string to be used for demonstration purposes";
char strB[80];
int main(int argc, char *argv[]){
char *pA; /* a pointer to type character */
char *pB; /* another pointer to type character */
puts(strA); /* show string A */
pA = strA; /* point pA at string A */
puts(pA); /* show what pA is pointing to */
pB = strB; /* point pB at string B */
putchar('\n'); /* move down one line on the screen */
printf("\n%c\n", *pA);
while(*pA != '\0') /* line A (see text) */
{
*pB++ = *pA++; /* line B (see text) */
}
*pB = '\0'; /* line C (see text) */
puts(strB); /* show strB on screen */
return 0;
}
输出:
A string to be used for demonstration purposes
A string to be used for demonstration purposes
A
A string to be used for demonstration purposes
编辑: 感谢大家的帮助:),对于noobie问题感到抱歉。我阅读了 Stephen G. Kochan 的 Programming in C ,其中关于指针的精彩部分很有帮助。
【问题讨论】:
-
您可能喜欢comp.lng.c faq 的第 6 部分...以及其他部分?
-
@smolpatchy 这个问题太宽泛了。为初学者阅读一本关于 C 的书。
-
我会尽快回答您的具体问题并提供更多详细信息,但是是的,阅读 Kernighan 和 Ritchie 的“C 编程语言”的前 4 章是个好主意。
标签: arrays c pointers implicit-conversion puts