C语言学习之指针
指针与数组
指针减指针得到的数的绝对值是中间元素个数。
数组关系运算:(跟建议第一种写法)
#define N_VALUES 5
float values[N_VALUES];
float* vp
for(vp=&values[N_VALUES];vp>&values[0];)
{
*--vp=0;
}
for(vp=&values[N_VALUES];vp>=&values[0];vp--)
{
*vp=0;
}
当指针用于数组关系运算时,C语言标准规定,允许指向数组最后一个元素后面的那个内存位置的指针比较,但不允许与指向第一个元素之前的那个内存位置的指针比较。
#include<stdio.h>
int main(void)
{
int arr[10]={0};
printf("%p\n", arr);//地址.首元素地址
printf("%p\n", &arr[0]");
printf("%p\n", &arr"S);
return 0;
}
除了以下两种情况数组名表示的不是首元素:
1、&数组名 数组名不是首元素的地址,表示整个数组。&数组名:取出的是整个数组的地址
2、sizeof(数组名) 数组名表示整个数组 sizeof(数组名)
二级指针
#include<stdio.h>
int main(void)
{
int a=10;
int*pa=&a;
int**ppa=&pa;//ppa就是二级指针
return 0;
}
int * * ppa:第二个 * 表示ppa是指针,而前面的int * 表示指针ppa指向的类型
多级指针
和二级指针一样,如:
int***pppa:三级指针
……
指针数组
例如整形数组用于存放整形、字符数组用于存放字符,指针数组是指存放指针的数组
上代码:
#include<stdio.h>
int main(void)
{
int a=10;
int b=20;
int c=30;
int arr[3]={a,b,c};//整形数组
int* arr2[3]={&a,&b,&c};//指针数组
for(int i=0;i<3;i++)
{
printf("%d ", *(arr2[i]))
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理