C 显示指针内容。str与int的区别
我正在玩各种各样的指针示例,有一个相当基本的问题 忽略事情是如何被操纵的,这只是获得更好理解的各种方式 这个问题与以下代码的输出有关C 显示指针内容。str与int的区别,c,pointers,C,Pointers,我正在玩各种各样的指针示例,有一个相当基本的问题 忽略事情是如何被操纵的,这只是获得更好理解的各种方式 这个问题与以下代码的输出有关 #include <stdio.h> #include <stdlib.h> void sampleForPosting(); int main(int argc, char** argv) { int size = 5; char* strVar; strVar = (char*)malloc(sizeof(c
#include <stdio.h>
#include <stdlib.h>
void sampleForPosting();
int main(int argc, char** argv)
{
int size = 5;
char* strVar;
strVar = (char*)malloc(sizeof(char) * size);
int* intVar;
intVar = (int*)malloc(sizeof(int) * size);
*(strVar + 0) = '1';
*(strVar + 1) = '2';
*(strVar + 2) = '3';
*(strVar + 3) = '4';
*(strVar + 4) = '\0';
*(intVar + 0) = 1;
*(intVar + 1) = 2;
*(intVar + 2) = 3;
*(intVar + 3) = 4;
printf("\n");
printf("strVar : %s\n", strVar); /// %s means to print out until \0 is reached
printf("\n");
printf("intVar : %d\n", intVar);
}
问题:
当打印出字符串指针的内容时,它会打印出实际的字符串。
当打印出int指针的内容时,它会打印出数字所在的地址
为什么会有不同的行为?
该行为是由printf参数%s还是%n决定的?
%s
打印一个字符串,要打印一个字符串,必须传递第一个字符的地址,并且它会一直读取,直到您所说的\0
%d
打印一个整数,要打印一个整数,您需要传递一个整数,但您要传递一个指针作为参数
因为intVar
是一个指针,所以它会打印地址。如果要打印号码,必须使用*intVar
或*(intVar+x)
printf(“intVar:%d\n”,*intVar);
见:
格式字符串由[…]转换规范组成,每个规范都会导致获取零个或多个后续参数。每个转换规范都由字符%
引入,并以转换说明符结束
对于转换说明符:
指定要应用的转换类型的字符。转换说明符及其含义如下:
d,iint参数被转换为有符号十进制符号
s[…]参数为
应为指向字符类型数组的指针
(指向字符串的指针)
pvoid*指针参数是以十六进制打印的(就像用%#x或%#lx打印一样)
%s
打印字符串,要打印字符串,您必须传递第一个字符的地址,并且它将按照您的说明一直读取到\0
%d
打印一个整数,要打印一个整数,您需要传递一个整数,但您要传递一个指针作为参数
因为intVar
是一个指针,所以它会打印地址。如果要打印号码,必须使用*intVar
或*(intVar+x)
printf(“intVar:%d\n”,*intVar);
见:
格式字符串由[…]转换规范组成,每个规范都会导致获取零个或多个后续参数。每个转换规范都由字符%
引入,并以转换说明符结束
对于转换说明符:
指定要应用的转换类型的字符。转换说明符及其含义如下:
d,iint参数被转换为有符号十进制符号
s[…]参数为
应为指向字符类型数组的指针
(指向字符串的指针)
pvoid*指针参数是以十六进制打印的(就像用%#x或%#lx打印一样)
您是否尝试编译代码:
warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’
编译将向您显示有关格式类型的警告
当您使用%s
时,意味着您与编译器对话:嘿,编译器,帮我打印字符串
当您使用%d
时,意味着您与编译器对话:嘿,编译器,帮我打印整数值
。因此编译器将打印变量intVar
如果要打印指针的地址,应使用%p
:
printf("intVar : %p\n", intVar);
您是否尝试编译代码:
warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’
编译将向您显示有关格式类型的警告
当您使用%s
时,意味着您与编译器对话:嘿,编译器,帮我打印字符串
当您使用%d
时,意味着您与编译器对话:嘿,编译器,帮我打印整数值
。因此编译器将打印变量intVar
如果要打印指针的地址,应使用%p
:
printf("intVar : %p\n", intVar);
您是否希望
int
s的数组与char
s的NUL终止数组一样处理?我实际收到一个编译警告,即%d需要int类型,但是该值实际上是int类型*您是否希望int
s的数组与char
s的NUL终止数组一样处理?我实际上收到了一条编译警告,即%d需要int类型,但该值实际上是int类型*根据您的回答,是参数决定了行为,正确吗?%d
是一个格式标志。format标志指示函数如何解析参数<代码>%d解析整数。但是您传递了一个指针(它是一个长的无符号整数)。因此,函数将把这个指针转换成一个整数。如果要打印地址,可以使用标志%p
,但如果要打印地址intVar
处的值,这是一个整数,则必须取消指针的引用,以使用*
访问其值。我已编辑以引用文档。请毫不犹豫地检查,以了解格式化是如何工作的。根据您的回答,是参数决定了行为,对吗?%d
是一个格式标志。format标志指示函数如何解析参数<代码>%d解析整数。但是您传递了一个指针(它是一个l