针对考研的C语言学习(定制化快速掌握重点3)
1.数组常见错误
数组传参实际传递的是数组的起始地址,若在函数中改变数组内容,数组本身也会发生变化
#include<stdio.h>
void change_ch(char* str)
{
str[0] = 'H';
}
int main()
{
char ch[] = "hello";
change_ch(ch);
printf("%s\n", ch);
return 0;
}
数组长度计算
数组总大小/每一个元素的大小=数组元素个数即数组长度
int main()
{
int arr[]={1,2,3,4,5,6};
int len = sizeof(arr)/sizeof(arr[0]);//数组总大小/每一个元素的大小=数组元素个数即数组长度
printf("%d\n",len);
return 0;
}
2.指针
指针变量加减法操作时,每次加一,增加的长度是其基类型的长度*1
#include<stdio.h>
int main()
{
int i[] = { 1,2,3,4,5 };
char ch[] = "hello";
int* pInt = &i;
char* pCh = &ch;
printf("%d\n", *pInt);
printf("*(pInt+1) == %d\n", *(pInt + 1));
printf("%c\n", *pCh);
printf("*(pCh+1) == %c\n", *(pCh + 1));
return 0;
}
指针的另一种用法
#include<stdio.h>
int main()
{
int i[] = { 1,2,3,4,5 };
char ch[] = "hello";
int* pInt = &i;
char* pCh = &ch;
printf("%d\n", pInt[0]);
printf("%c\n", pCh[0]);
return 0;
}
这种用法称为“数组指针”(array pointer)或“指针算术”(pointer arithmetic):
pInt[0]
:等同于*(pInt + 0)
,实际上获取的是i[0]
的值,即1
。pCh[0]
:同样等同于*(pCh + 0)
,获取的是ch[0]
的值,即字符'h'
。
这利用了 C 语言中指针和数组的关系,允许通过数组下标语法来访问指针指向的内容。
3.引用(需要.cpp后缀了属于C++的知识,但是在考研数据结构中使用不算难,可以简化多级指针的使用)
引用其实就是起小名,还是同一个人,托管的地址一样(为了简化内存损耗,不是复制,而是直接找到内存进行引用)
引用--->针对子函数改变主函数的普通变量问题
【注】引用传参--->直接使用而不是复制,因此改变会改变变量本身