2.初识指针(C语言)

        如果你真的真的不知道指针指向什么,那么你可以这样~

int* p = NULL;

 2.初识指针(C语言)_第1张图片

 看我们把0强制类型转换成空指针.

 2.初识指针(C语言)_第2张图片

 指针用完之后,指向空!

 if(pa != NULL)

{

}

指针使用之前检查有效性!

 2.初识指针(C语言)_第3张图片

#include 

int main()
{
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	int i = 0;
	int* p = arr;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for(i=0; i

 2.初识指针(C语言)_第4张图片整型指针加一跳动一个字节。

 2.初识指针(C语言)_第5张图片

 2.初识指针(C语言)_第6张图片

 指针相减得到的是个数。

2.初识指针(C语言)_第7张图片

#include 

int my_strlen(char* str)
{
	char* start = str;
	char* end = str;
	while(*end != '\0')
	{
		end++;
	}
	return end - start;
}

int main()
{
	char arr[] = "bit";
	int len = my_strlen(arr);
	printf("%d\n", len);

    return 0;
}

不能用sizeof求大小,因为arr为首元素的地址所占的字节数,为4.

 

 数组的数组名为首地址,参考:数组名为什么代表首地址_xhoo 的博客-CSDN博客_数组名代表数组的首地址

        数组的0.1.2.3都是偏移地址,而a 就是段地址, 这个段地址的值根与第一个元素的地址是一样的,所以指向第一个元素,段地址中这跟汇编的寻址方式有异曲同工的地方,就是这么简单,a代表一个首地址,然后加上偏移量就可以。

2.初识指针(C语言)_第8张图片

 注意:1)&数组名取出的是整个数组的地址,因为数组名是段地址。

2)sizeof(数组名),数组名表示的是整个数组,计算的是整个数组的大小。

2.初识指针(C语言)_第9张图片

 2.初识指针(C语言)_第10张图片

 2.初识指针(C语言)_第11张图片

 2.初识指针(C语言)_第12张图片

#include 

int main()
{
	int a = 10;
	int* pa = &a;
	int** ppa = &pa;//二级指针
	int*** pppa = &ppa;//三级指针

    return 0;
}

 子子孙孙,无穷尽也。

 2.初识指针(C语言)_第13张图片

 2.初识指针(C语言)_第14张图片

 这样写能使结构更加清楚。

2.初识指针(C语言)_第15张图片

整型数组——存放整型

字符数组——存放字符

指针数组——存放指针

你可能感兴趣的:(C语言从入门到进阶,c语言,c++,c#)