C语言 字符指针数组和二维字符数组的区别

对于下面的这段代码

#include 

char *arr[5];
char s[5] = "11"; 

int main(void)
{
	arr[0] = s;
	scanf("%s", s);//输入22
	arr[1] = s; 
	for (int i = 0; i < 2; i++)
		printf("%s ", arr[i]);
	return 0;
}

会发现输出的结果并不是11 22,而是22 22。

因为赋值给arr[0]和arr[1]的只是s的地址,它们并没有保存s的值,后来的赋值将s的值改变了,arr[0]和arr[1]都去访问s的地址,所以输出的是相同的结果。

可以看出:

二维字符数组比一维的字符指针数组功能更强大,因为字符串的值是存在于二维字符数组里面的,二维字符数组既可以保存字符串的值,也能够调用字符串的地址。

而一维的字符指针数组只能够保存字符串的地址,而不会去保存字符串的值。

你可能感兴趣的:(#,程序设计基础:C语言)