C语言学习之一级指针一维数组

news/2024/10/21 7:42:07/
  • 一级指针变量名的含义:
int a = 98;
int *p = &a;
  • p:表示指针变量名,存放的是地址;
  • *p:取指针变量指向的内存空间的数据;
  • p+1:向后偏移一个int类型大小的空间;
  • *(p+1):取p+1指向的内存空间的数据;
  • 一维数组名的含义:
int array[5] = {11,22,33,44,55};
  • array:表示数组的名字,同时也是数组的首地址
  • array[1]:取数组第一个元素特别注意:数组的下标是从0开始的),等价于*(array+1)
  • &array[1]:取数组第一个元素地址,等价于array+1;
  • 两者的区别:
  • 可以通过一级指针指向一维数组,比如:在给函数传递一个数组时,可以使用一级指针指向一个一维数组;
  • 一级指针变量名不完全等价于一维数组名;
  • 一级指针变量名是一个变量,可以被修改;
  • 一维数组名字是一个常量,不可以被修改;
  • 代码如下:
#include<stdio.h>void print_array(int a[],int len){for(int i = 0; i < 5; i++){printf("*(a + %d) = %d\n",i,*(a + i));}putchar('\n');}void show_array(int *q,int len){for(int j = 0; j < 5; j++){printf("q[%d] = %d\n",j,q[j]);}putchar('\n');}int main(int argc, const char *argv[])
{int array[5] = {11,22,33,44,55};int *p = array;//指针变量的指向没有被修改for(int i = 0; i < 5; i++){printf("*(p + %d) = %d\n",i,*(p+i));}putchar('\n');printf("array = %p\n",array);printf("p = %p\n",p);putchar('\n');printf("array + 4 = %p\n",array + 4);printf("p + 4 = %p\n",p + 4);putchar('\n');printf("*(array + 3) = %d\n",*(array + 3));printf("*(p + 3) = %d\n",*(p + 3));printf("array[3] = %d\n",array[3]);putchar('\n');for(int i = 0; i < 5; i++){printf("array[%d] = %d\n",i,array[i]);}putchar('\n');print_array(p,5);show_array(array,5);//指针变量的指向被修改,先使用p中的值,再对p做++运算for(int i = 0; i < 5; i++){printf("%d\n",*(p++));//printf("%d\n",*p++);//printf("%d\n",*p);//p++;}putchar('\n');for(int i = 0; i < 5; i++){printf("*(p + %d) = %d\n",i,*(p+i));}putchar('\n');for(int i = 0; i < 5; i++){printf("%d\n",*(--p));}return 0;
}
  • 运行结果:
*(p + 0) = 11
*(p + 1) = 22
*(p + 2) = 33
*(p + 3) = 44
*(p + 4) = 55array = 0x7fffe3fadfb0
p = 0x7fffe3fadfb0array + 4 = 0x7fffe3fadfc0
p + 4 = 0x7fffe3fadfc0*(array + 3) = 44
*(p + 3) = 44
array[3] = 44array[0] = 11
array[1] = 22
array[2] = 33
array[3] = 44
array[4] = 55*(a + 0) = 11
*(a + 1) = 22
*(a + 2) = 33
*(a + 3) = 44
*(a + 4) = 55q[0] = 11
q[1] = 22
q[2] = 33
q[3] = 44
q[4] = 5511
22
33
44
55*(p + 0) = 32767
*(p + 1) = 847337984
*(p + 2) = 1376258227
*(p + 3) = 1273121360
*(p + 4) = 2198655
44
33
22
11

http://www.ppmy.cn/news/1026229.html

相关文章

R语言5_安装Giotto

环境Ubuntu22/20, R4.1. 已开启科学上网。 第一步&#xff0c;更新服务器环境&#xff0c;进入终端&#xff0c;键入如下命令&#xff0c; apt-get update apt install libcurl4-openssl-dev libssl-dev libxml2-dev libcairo2-dev libgtk-3-dev libhdf5-dev libmagick9-dev …

count(*) 和 count(1)和count(列名)区别

count(1) and count(*) 当表的数据量大些时&#xff0c;对表作分析之后&#xff0c;使用count(1)还要比使用count(*)用时多了&#xff01; 从执行计划来看&#xff0c;count(1)和count(*)的效果是一样的。 但是在表做过分析之后&#xff0c;count(1)会比count(*)的用时少些…

冯诺依曼体系结构与进程概念理解

目录 1. 先谈硬件 1、初步理解冯诺依曼体系结构 2、理解各个模块之间的协作 2. 再谈软件 1、为什么要有操作系统 2、操作系统如何管理软硬件资源 3. 再谈进程 1、什么是进程 2、如何理解进程 3、Linux 是如何管理进程的 写在最后&#xff1a; 1. 先谈硬件 1、初步理…

【Bert101】最先进的 NLP 模型解释【02/4】

0 什么是伯特&#xff1f; BERT是来自【Bidirectional Encoder Representations from Transformers】变压器的双向编码器表示的缩写&#xff0c;是用于自然语言处理的机器学习&#xff08;ML&#xff09;模型。它由Google AI Language的研究人员于2018年开发&#xff0c;可作为…

实践指南-前端性能提升 270% | 京东云技术团队

一、背景 当我们疲于开发一个接一个的需求时&#xff0c;很容易忘记去关注网站的性能&#xff0c;到了某一个节点&#xff0c;猛地发现&#xff0c;随着越来越多代码的堆积&#xff0c;网站变得越来越慢。 本文就是从这样的一个背景出发&#xff0c;着手优化网站的前端性能&a…

一分钟上手Vue VueI18n Internationalization(i18n)多国语言系统开发、国际化、中英文语言切换!

这里以Vue2为例子 第一步&#xff1a;安装vue-i18n npm install vue-i18n8.26.5 第二步&#xff1a;在src下创建js文件夹&#xff0c;继续创建language文件夹 在language文件夹里面创建zh.js、en.js、index.js这仨文件 这仨文件代码分别如下&#xff1a; zh.js export de…

2023-08-12力扣每日一题-暴力hard

链接&#xff1a; 23. 合并 K 个升序链表 题意&#xff1a; 如题 解&#xff1a; 时间668ms击败 5.00%使用 C 的用户/内存12.37mb击败 87.96%使用 C 的用户 循环选择插入新链表的节点&#xff0c;纯正的暴力&#xff0c;不过空间用得少 最坏应该是1E4*1E4&#xff0c;没…

26 | 谷歌应用APP数据分析

基于kaggle公开数据集,对谷歌应用市场的APP情况进行数据探索和分析。 from kaggle: https://www.kaggle.com/lava18/google-play-store-apps 分析思路: 0、数据准备 1、数据概览 2、种类对Rating的影响 3、定价策略 4、因素相关性分析 5、用户评价 6、总结 0、数据准备 (…