0
点赞
收藏
分享

微信扫一扫

C语言学习笔记—P23(<C语言高阶>+指针的进阶<1>+题例+图解)

林塬 2022-01-17 阅读 22
c语言

指针的主题,我们在初级阶段的《指针》章节已经接触过了,我们知道了指针的概念:

这个章节,我们继续探讨指针的高级主题。

1. 字符指针

在指针的类型中我们知道有一种指针类型为字符指针 char* ;

一般使用:

还有一种使用方式如下:

代码 const char* pstr = "hello bit.";  特别容易让同学以为是把字符串 hello bit 放到字符指针 pstr 里了,但是/本质是把字符串 hello bit. 首字符的地址放到了pstr中。

上面代码的意思是把一个常量字符串的首字符 h 的地址存放到指针变量 pstr 中。

int main()
{
	//int a = 10;
	//printf("%p\n",  &a);
	//char ch = 'w';
	//char* p = &ch;

	const char* p = "abcdef";
	//*p = 'w';

	return 0;
}

那就有可这样的面试题:

#include <stdio.h>
int main()
{
	char str1[] = "hello bit.";
	char str2[] = "hello bit.";
	const char* str3 = "hello bit.";
	const char* str4 = "hello bit.";
	if (str1 == str2)
		printf("str1 and str2 are same\n");
	else
		printf("str1 and str2 are not same\n");

	if (str3 == str4)
		printf("str3 and str4 are same\n");
	else
		printf("str3 and str4 are not same\n");

	return 0;
}

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abcdef";

	const char* str1 = "abcdef";
	const char* str2 = "abcdef";

	if (arr1 == arr2)
		printf("arr1==arr2\n");
	else
		printf("arr1!=arr2\n");

	if (str1 == str2)
		printf("str1==str2\n");
	else
		printf("str1!=str2\n");

	return 0;
}

这里最终输出的是: 

 这里str3str4指向的是一个同一个常量字符串。C/C++会把常量字符串存储到单独的一个内存区域,当 几个指针。指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化 不同的数组的时候就会开辟出不同的内存块。所以str1str2不同,str3str4不同。

 2. 指针数组

在《指针》章节我们也学了指针数组,指针数组是一个存放指针的数组。

这里我们再复习一下,下面指针数组是什么意思?

 

 

ypedef int* pint;
#define PINT int*
int main()
{
	//int a, b;//a int b int
	//int *pa, pb;
	pa -> int*
	pb -> int

	//int * pa, * pb;
	//
	//pint pa, pb;
	//pa int*
	//pb int*

	PINT pa, pb;//int * pa,pb;
	//pa -> int*
	//pb -> int

	return 0;
}
//整型数组 - 存放整型的数组
//字符数组 - 存放字符的数组
//
//指针数组 - 存放指针的数组

int main()
{
	char* arr[] = { "abcdef", "qwer", "zhangsan" };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);

	for (i = 0; i < sz; i++)
	{
		printf("%s\n", arr[i]);
	}
	return 0;
}
int main()
{
	int arr1[] = { 1,2,3,4,5 };
	int arr2[] = { 2,3,4,5,6 };
	int arr3[] = { 3,4,5,6,7 };

	int* arr[] = {arr1, arr2, arr3};

	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			printf("%d ", arr[i][j]);//*(*(arr+i)+j)
		}
		printf("\n");
	}

	return 0;
}

后记:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                               ——By 作者:新晓·故知

举报

相关推荐

0 条评论