自学内容网 自学内容网

C语言初阶————指针3

2026年1月8日学习总结:

        本次主要是将指针剩余部分进行学习,内容主要分为以下四个部分:

(1)指针的运算:主要包括指针加\减整数、指针加\减指针、指针的关系运算。

1.指针加\减整数:将指针的地址进行移动,所加(减)的值相当于地址向后(向前)移动的步值。

int main()
{
int arr[10] = { 0 };
//利用指针加(减)整数打印数组内容
int* parr = &arr[0];
int i ;
for(i=0;i<10;i++)
{
printf("%d ", *(parr + i));
 }
 *parr=&arr[9];
 for(i=9;i>=0;i--)
 {
printf("%d ",*(parr - i));
 }
return 0;
}

2.指针加\减指针:

①指针减指针:得到的是指针指针之间元素的个数(包括开头,不包括结尾)。

int main()
{
int arr[10] = { 0 };
printf("%d\n", &arr[9] - &arr[0]);//9
return 0;
 }

根据相关内容可以利用指针减指针编写strlen函数

// 编写my_strlen函数
#include<string.h>
//使用普通循环方法
int my_strlen(char* s)
{
int count = 0;
while (*s != '\0')
{
s++;
count++;
}
return count;
}
//使用递归的方法
int my_strlen1(char* s)
{
if (*s == '\0')
{
return 0;
}
else 
{
return my_strlen1(s + 1) + 1;
}
}
//使用指针之间的减法
int my_strlen2(char* s)
{
int* frist = s;
while (*s != '\0')
{
s++;
}
return s - frist;
}
int main()
{
char a[] = "abcde";
printf("%d\n", strlen(a));//使用strlen公式,必须包含string,h
printf("%d\n",my_strlen(a));
printf("%d\n", my_strlen1(a));
printf("%d\n", my_strlen2(a));
return 0;
 }

②指针加指针:一般不使用,没有什么实际意义。
注意:不是所有指针数都能相减,必须是同一个指向对象。

③指针关系运算:                                                                                                                           指针间的比较:规定允许与指针所指对象的最后一个地址向后的位置进行比较,但是不允许与所指对象的第一个地址向前的地址进行比较。(虽然有这种规定但是一般的编译器就算违法规定也不会报错)

#define value 5
float  arr[value];
float *p;
int main()
{
for (p = &arr[value]; p > &arr[0];)
{
*--p = 0;
}
for (p = &arr[value - 1]; p >=& arr[0]; p--)
{
*p = 0;
}
return 0;
}

(2)指针与数组:                                                                                                                            数组:一组相同类型元素的集合。
指针变量:是一个变量,存放的是地址。                                                                                          数组名相当于数组首元素地址(例如&arr[0]),除了两种特殊情况&arr和sizeof(arr)。(正确数组内容时说过)

int main()
{
int arr[10] = { 0 };
//arr是首元素地址,相当于&arr[0],除两种特殊情况以外(&arr和sizeof(arr))
int* p = arr;
//通过指针访问数组
return 0;
}

(3)二级指针                                                                                                                                   二级指针变量:用来存放一级指针变量的地址。                                                                               指针变量(一级指针):int表示指向对象是int类型,*表示是指针。                                                 二级指针变量(指向指针变量pa的地址):int*表示指向对象是指针int*,*表示该变量为指针。      

int main()
{
int a = 10;
int* pa = &a;
//指针变量(一级指针),int表示指向对象是int类型,*表示是指针
int** ppa = &pa;
//二级指针变量(指向指针变量pa的地址),int*表示指向对象是指针int*,*表示该变量为指针
**ppa = 20;
return 0;
}

(4)指针数组:存放指针的数组。                                                                                                    相关运用:①通过该地址去访问(打印)数据。②模拟一个二维数组(将多个数组联合)

int main()
{
int a = 10;
int b = 20;
int c = 30;
int* par[10] = { &a,&b,&c };
//可以通过该地址去访问(打印)数据
printf("%d\n", *(par[0]));
//也可以用指针数组模拟一个二维数组,(将多个数组联合)
int arr1[4] = { 0,1,2,3 };
int arr2[4] = { 4,5,6,7 };
int arr3[4] = { 8,9,10.11 };
int* par[3] = { arr1,arr2,arr3 };
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", (*par[i] + j));
}
printf("\n");
}
return 0;
}


原文地址:https://blog.csdn.net/2401_83008139/article/details/156799723

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!