C 指向数组的指针;到原始

标签 c pointers address-operator

我使用的 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 是一个 intpage 是一个 int *

您从什么 channel 学习 C?

很遗憾,我无法告诉您如何配置 Visual Studio 2015,因为我以前从未使用过它。你试过阅读它的手册吗?

关于C 指向数组的指针;到原始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46380581/

相关文章:

c - 如何从日期时间获取时间

c - 使用没有内在函数的 gcc/clang 向量化残差平方和

c++ - Direct2D C++ 用户输入

c++ - temp2->next 包含什么?

pointers - 获取通过接口(interface)获取的 var 上的指针

C 指针 malloc

Python 将 void 指针作为参数传递给 C 函数(SWIG、Numpy)

将字符串复制到 char**

c++ - 为什么指针在 C++ 中表现得像这样

c++ - to_address 的具体用例