0
点赞
收藏
分享

微信扫一扫

指针详解

一、指针运算

给一个指针变量+1,通常情况下不是给指针本身+1,而是”迈一步“,步长根据指针的类型来确定。

int main() {
	char a = 1;
	int b = 1;
	int arr[10] = { 0 };

	char* pa = &a;
	int* pb = &b;
	int(*parr)[10] = &arr;

	printf("%p\n", pa );
	printf("%p\n", pa + 1); //相差1
	printf("%p\n", pb);
	printf("%p\n", pb + 1); //相差4
	printf("%p\n", parr);
	printf("%p\n", parr + 1); //相差40
	return 0;
}

指针详解_字符指针

二、字符指针(char*)

char*用于存储char型变量的地址

1.通过字符指针创建常量字符串

以下是三种打印字符串的方式

int main() {
	//第一种
	char arr[] = "hello world";
	printf("%s\n", arr); //arr末尾隐藏\0,打印时读取到\0结束
  
	//第二种
	char* p1 = arr;
	printf("%s\n", p1);
  
	//第三种
	char* p2 = "hello world";
	printf("%s\n", p2);
	return 0;
}

其中第一二种为常规方式,重点分析第三种 ‘char* p2 = "hello world" ’,看似是把char型数组直接赋值给p2指针,实则不然,

因为char型指针最多存放4个字节,而hello world\0有12个字节。p2实际上是存储了首元素地址。

用第三种方式创建的字符串为常量字符串,无法被修改,最好用const加以修饰

int main() {
	char arr1[] = "abcdef";
	char arr2[] = "abcdef";
	char* p1 = "abcdef";
	char* p2 = "abcdef"; //如果两个常量字符串完全相同,则其不会在内存中反复创建,只会创建一个,并且拥有唯一的地址

	if (arr1 == arr2)  //首元素地址不相同
		printf("相等\n");
	else
		printf("不相等\n");

	if (p1 == p2)  //首元素地址相同
		printf("相等\n");
	else
		printf("不相等\n");
	return 0;  //结果为不相等 相等
}


举报

相关推荐

0 条评论