为什么输出时要用p,p不是保存地址吗?所以按理输出来的值应该是一个地址
请讲详细一点(基础一点)
%s是字符串,*p是字符串的第一个字符,所以不匹配。
你的代码编译应该也有问题,ae是不能直接转换为char * 的。
如下修改,可以输出hello。如果要输出yes,需要将p指针跳过ae的第一个字符串长度+1,即跳过第一个字符串的字符串结束符。
也不能将ae直接转换为char **
int main()
{
char ae[][20] = {"hello","yes"};
char *p = (char*)ae;
printf("%s",p);
return 0;
}
(1)修正你的说法,你如果用的是C语言,C语言中没有引用的概念,引用是 C++里的概念。
(2)ae是二维数组的首地址,相当于二级指针,p是char *类型,是一级指针,用二级指针给一级指针赋值本身就存在风险;你如果用高版本的vs,char *p = ae这里会直接报错,低版本中会给警告。
(3)p是char 类型,p就是char类型,用%s输出是不对的,%s用于字符串类型或字符数组输出显示,%c用于单个字符输出显示。
代码修改如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ae[][10] = { "你好","暗示" };
char* p = ae[0]; //这里用ae[0]赋值
p = ae[1];
printf("%s", p); //这里输出用p
system("pause");
return 0;
}
1.在c语言里字符串和char数组就是一回事
2.char数组变量本身就是一个指针,它指向数组的首地址
3.要输出字符串,需要传入字符串的首地址
4.所以你在scanf("%s",s)的时候(假如s是个char[]),逗号后面传s也行,传&s也行