我有以下代码:
int main(int argc, char **argv)
{
printf("%s\n",*argv);
int test = 5;
char* p;
*pint = test;
p = "banana";
printf("%s\n",p);
printf("%d\n",*pint);
}
为什么我必须写p="banana"
而不是*p="banana"
但是对于一个整数,它需要是*pint
,否则它只会打印整数的地址?不应该p
打印" banana"的地址?
答案 0 :(得分:0)
您正在比较数组和整数变量行为!
p = "banana";
您正在将字符串“banana”的基址分配给指针p。
printf函数原型是
int printf( const char *restrict format, ... );
printf("%s\n",p);
上述语句暗示您将指针p作为参数传递给函数printf,该函数保存字符串“banana”的地址
答案 1 :(得分:-1)
您正在使用%s
进行打印。这将打印一个C字符串,将输入作为字符串第一个字节的地址。
如果使用%p
进行打印,您将获得该地址。
printf("%p\n",p);
答案 2 :(得分:-1)
C风格的字符串是由'\0'
终止的字符数组。
所以当你给它分配一个字符串时,它就是它的样子;
char p[] = {'b', 'a', 'n', 'a', 'n', 'a', '\0'};
因此,当您说使用格式说明符p
打印出%s
时,它将继续打印剩余的字符,直到它到达空终止字符。
执行此操作printf("%c", *p)
只会打印第一个字符。
使用整数,如果你这样做;
int p[] = {1,2,3,4,5};
打印出来;
print("%d", *p);
你只得到数组中的第一个整数。
请注意;每个格式说明符都有它接受的值。这就是为什么他们被称为格式说明符
PS:
我根据user2079303和alk的评论编辑了我的答案!