C 指向数组的指针;到原始
C Pointer To Array; To Primitive
我正在使用 Visual Studio 2015,它没有显示与我使用指针相关的编译器警告。如果我暂时指的是指向数组 char name[] = "My Name"
的指针 char* p
,我没有任何指导说明以下内容并不完全相同;即导致指向数组第一个字符的指针
char* pname = name; // points to first char in array
printf("\n%c\n", *pname);
pname = &name; // points to first char in array
printf("\n%c\n", *pname);
pname = &name[0]; // this explicitly points to the first char in the array
printf("\n%c\n", *pname);
每个 printf
的结果都是相同的值,并且由于我没有看到编译器警告,所以我需要有关正确形式的指导。
这与指向 int 的指针相同,因此我没有看到编译器警告,因此我假设以下是等效的
int age = 45;
int* page = &age; // point to age
page = age // pointer to age
谁能澄清一下,或者帮我在 Visual Studio 2015 年打开编译器警告,而不必切换到 TDM GCC + Eclipse Oxygen。
Point - Be syntactically specific and correct all warnings
char* pname = name; // points to first char in array
正确。当你评估一个数组时,你会得到一个指向它第一个元素的指针。
pname = &name; // points to first char in array
不正确。 &name
是指向整个数组的指针,而不仅仅是它的第一个元素。分配是类型错误:pname
是 char *
,但 &pname
是 char (*)[8]
。
pname = &name[0]; // this explicitly points to the first char in the array
正确。这样做的原因是因为 a[b]
被定义为 *(a + b)
。所以 &name[0]
的真正意思是 &*(name + 0)
。和以前一样,数组的计算结果为其第一个元素的地址。添加 0
不会改变它。 *
取消引用指针,但 &
返回地址(它们相互抵消)。
int age = 45;
int* page = &age; // point to age
正确。
page = age; // pointer to age
不正确。这是一个类型错误:age
是一个 int
,但 page
是一个 int *
。
你学习 C 的来源是什么?
很遗憾,我无法告诉您如何配置 Visual Studio 2015,因为我以前从未使用过它。你试过阅读它的手册吗?
我正在使用 Visual Studio 2015,它没有显示与我使用指针相关的编译器警告。如果我暂时指的是指向数组 char name[] = "My Name"
的指针 char* p
,我没有任何指导说明以下内容并不完全相同;即导致指向数组第一个字符的指针
char* pname = name; // points to first char in array
printf("\n%c\n", *pname);
pname = &name; // points to first char in array
printf("\n%c\n", *pname);
pname = &name[0]; // this explicitly points to the first char in the array
printf("\n%c\n", *pname);
每个 printf
的结果都是相同的值,并且由于我没有看到编译器警告,所以我需要有关正确形式的指导。
这与指向 int 的指针相同,因此我没有看到编译器警告,因此我假设以下是等效的
int age = 45;
int* page = &age; // point to age
page = age // pointer to age
谁能澄清一下,或者帮我在 Visual Studio 2015 年打开编译器警告,而不必切换到 TDM GCC + Eclipse Oxygen。
Point - Be syntactically specific and correct all warnings
char* pname = name; // points to first char in array
正确。当你评估一个数组时,你会得到一个指向它第一个元素的指针。
pname = &name; // points to first char in array
不正确。 &name
是指向整个数组的指针,而不仅仅是它的第一个元素。分配是类型错误:pname
是 char *
,但 &pname
是 char (*)[8]
。
pname = &name[0]; // this explicitly points to the first char in the array
正确。这样做的原因是因为 a[b]
被定义为 *(a + b)
。所以 &name[0]
的真正意思是 &*(name + 0)
。和以前一样,数组的计算结果为其第一个元素的地址。添加 0
不会改变它。 *
取消引用指针,但 &
返回地址(它们相互抵消)。
int age = 45; int* page = &age; // point to age
正确。
page = age; // pointer to age
不正确。这是一个类型错误:age
是一个 int
,但 page
是一个 int *
。
你学习 C 的来源是什么?
很遗憾,我无法告诉您如何配置 Visual Studio 2015,因为我以前从未使用过它。你试过阅读它的手册吗?