C编。指针和字符串

时间:2016-06-02 18:40:01

标签: c string pointers

char str[] = "hello World!!!!!";
char *ptr = str + 6;
printf("%s",ptr);

输出:lo world !!!!!

printf语句中,它指定为ptr而不是*ptr因此,为了打印变量的值,我们使用*(取消引用运算符)和指针名称。例如:

int i=2;
int *ptr;
ptr=&i;
printf("%d",ptr);

打印地址,因为ptr存储地址(&i)类似于顶部示例,因为它应该打印地址而不是str[]的值,因为只使用ptr而不是*ptr,但它没有。为什么呢?

2 个答案:

答案 0 :(得分:2)

在你的第一个例子中,你必须char修饰符传递一个"%s"指针,所以它实际上是它必须的方式,你当然知道如果您阅读了相应的文档,例如C标准。

第二个,是错的。因为它会调用未定义的行为。要打印变量的地址,需要使用运算符的&地址创建指向它的指针,或者直接使用运算符的地址和"%p" printf()说明符,任何其他说明符会导致未定义的行为

使用正确的说明符也适用于您的第一个示例。

答案 1 :(得分:0)

我们需要将地址传递给%s。地址必须是打印字符串的字符。它将打印,直到它击中' \ 0'字符串是字符串的结尾。

在第二个示例中,%d需要一个数字。我们可以将地址传递给它,或者地址中的值由我们决定。