【发布时间】:2017-02-23 11:41:54
【问题描述】:
我是 C 语言的新手,我正在尝试使用如下指针。
-
po1定义为指向地址的指针。 PC 为其分配 1 个字节的内存。po2是一样的。我想得到po2指向的内存地址,却只得到一个意想不到的0,显然不是地址。#include <stdio.h> int main(int argc, char *argv[]) { char *po2, *po1; printf("---%d---\n", po2); return 0; }输出是:
demo11.c:5:23:警告:格式指定类型'int',但参数的类型为>'char *' [-Wformat] printf("-****--%d-****--\n", po2); ~~ ^ ~~ %s 生成 1 个警告。 -****--0-****--
-
然后我试图将
foo的值赋予po2指向的内存,但它给出了错误。#include <stdio.h> int main(int argc, char *argv[]) { char *po2, *po1; char foo = 'D'; *po2 = foo; printf("%c---------------\n", *po2); return 0; }输出是:
因信号终止:SEGMENTATION FAULT (11)
很明显,错误是由*po2 = foo语句引起的;
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
使用%p打印指针地址值
-
@ttdado
because both pointer po1 and po2 are NULL需要注意的是,这只是第一次警告的暗示,并不是标准的保证。printf("---%d---\n", po2);也应该是printf("---%p---\n", po2); -
*po2 = foo->po2 = &foo -
把这个
*po2 = foo;改成那个:po2 = &foo; -
如果您使用 C 编程,您需要对指针有很好的理解。我建议你去搜索和学习。大多数人喜欢用方框和箭头来画画——我知道我喜欢。所以尝试搜索“C 指针”的图像,并阅读相关文章。时间上的投入将为您省去很多痛苦。