#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
void test(int* p,int len); //函数的申明
int main()
{
int a[] = { 1,23,45,345,456,645,64,3,534,4,456,2 };
int x = sizeof(a) / sizeof(a[0]); //计算数组的长度。
test(a, x); //将数组的首地址以及数组长度传入函数
for (int i = 0; i < x; i++)
{
printf("%d ", a[i]);
}
}
void test(int* p,int len)
{
int mid = 0;
int as = 1;
for (int j = 0; j < (len-1); j++)
{
for (int k = j + 1; k < (len); k++)
{
if (*p < *(p + as))
{
mid = *p;
*p = *(p + as);
*(p + as) = mid;
}
as++;
}
p++;
as = 1;
}
return 0;
}
此篇代码的目的:通过指针进行整型数组内数字的排序
思路:利用两大指针的下标发生不同的变化,进行比较
重点1:整型数组长度的计算只可以通过sizeof(a) / sizeof(a[0])这种方法,因为本质是sizeof()函数计算的是数组的全部字节长度(sizeof(a)表示数组a的全部字节长度,sizeof(a[0])表示数组内一个数字所占用的字节),int型数组内一个数字占用4字节,如此就可以计算出数字中有多少个数
【
重点2:指针就是指针变量,变量中存的是地址(这是核心中的核心),谁问你什么是指针这一句话就可以解释指针
扩展:int *p = &a,表示将a的地址送给p,同时建立指针*p
*与p是可以分开的,例如:int * p = &a;也是可行的
对于指针*p的理解你可以通过想象两列内存,第一列内存是p,p中存的是a的地址,第二列内存是a,a中存的是数字,这样就很容易理解了。
*(p+3);这个指针的下标没有变,仍然指向的是第一位,只是暂时用一下第三个位置的内容。
p=p+1,这个指针的下标就发生的变化,本质是p中保存的地址发生的变化
*p表示p中存的那个地址所在地方的内容
p = p+1,一次移动的字节数关键看是int型还是char型,int型号移动一次4字节数,char型移动一次1字节
指针的最大优点:可以从改变根部的数字,例如:int a = 10, *p = &a; *p = 20 //这样a的内容就变成了20,直指内存所在地址的内容,仔细体会它的美妙。
】
总结:重点2以及其扩展是最重要的,个人感觉只要理解了重点2,基本上就掌握指针了,当然了哪里有不合适的地方或者有疑问请大家多多指教共同进步。