c程序设计语言 by K&R(二)指针与数组
指针与数组
1. c语言只有值传递,没有引用传递
- 可通过指针交换
#include <stdio.h>
#include <stdlib.h>
void swap(int* a, int* b){
int tmp = *b;
*b = *a;
*a = tmp;
}
int main(void) {
int a = 2;
int b = 3;
swap(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
- 但以下代码在c++环境下才能运行
void swap(int& a, int& b){
int tmp = b;
b = a;
a = tmp;
}
int main(void) {
int a = 2;
int b = 3;
swap(a, b);
printf("%d %d\n", a, b);
return 0;
2. (*ip)++
如果实现对ip所指对象进行自增,(*ip)++ 中的括号是必须的。否则改表达式对ip进行+1运算,而非对ip所指对象进行+1运算。因为类似于* 、++这样的一元运算符遵循从右至左的结合顺序。
3. char s[]和 char* s是等价的
s是字符数组的起始地址
4. C语言不进行数组越界检查
arr[-1],arr[-2]表示arr[0]之前的两个元素
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int c[2] = {0,0};
printf("%d %d\n", c[-1], c[-2]);
return 0;
}
输出:
32767 -502976128
5. void*是一种特殊的指针类型
可以用来存放任意对象的地址。一个void指针存放着一个地址,这一点和其他指针类似。不同的是,我们对它到底储存的是什么对象的地址并不了解。
6. strcpy的实现
- 通过数组实现
void strcpy_a(char* s, char* t){
int i = 0;
while((s[i] = t[i]) != '\0')
i ++;
}
- 通过指针实现
void strcpy_p(char* s, char* t){
while(*s++ = *t++);
}
7. strcmp的实现
- 通过指针实现
int strcmp_p(char* s, char* t){
for(;*s == *t; s++, t++){
if(*s == '\0') return 0;
}
return *s - *t;
}
- 通过数组实现
int strcmp_a(char* s, char* t){
int i;
for(i = 0; s[i] == t[i]; i++)
if(s[i] == '\0') return 0;
return s[i] - t[i];
}
8.命令行参数
main(int argc, char* argv){}
argc表示程序运行时命令行中参数的数目;argv指向字符串数组的指针,每个字符串对应一个参数
- 实现say程序:
#include<stdio.h>
int main(int argc, char* argv[]){
printf("%d\n", argc);
for(int i = 0; i < argc; i++){
printf("%s\n",argv[i]);
}
return 0;
}
命令行运行:
gcc say.c -o say
./say hello world输出:

c程序设计语言 by K&R(二)指针与数组的更多相关文章
- C程序设计语言(K&R) 笔记2
(1) #include <stdio.h> main(){ int c; while((c = getchar()) != EOF){ putchar(c); } } 注意,因为 != ...
- C程序设计语言(K&R) 笔记1
当作复习... (1)将华氏度 换算成 摄氏度,公式: ℃=(5/9)(̧°F-32) #include <stdio.h> int transformTemprature(int F){ ...
- 《C程序设计语言》笔记(二)
四:函数与程序结构 1:函数之间的通信可以通过参数.函数返回值以及外部变量进行. 2:如果函数定义中省略了返回值类型,则默认为int类型.如果没有函数原型,则函数将在第一次出现的表达式中被隐式声明,比 ...
- 转:浅谈C/C++中的指针和数组(一)
再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...
- 浅谈C中的指针和数组(一)
本文转载地址:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html 在原文的基础上加入自己的想法作为修改. 指针是C/C ...
- 《C程序设计语言》(K&R)中文高清非扫描件
<C程序设计语言>(K&R)中文高清非扫描件(带书签目录) 对于某下载东西都要C币的网站无爱了.好不容易找了一个,发出来看会不会帮到别人 附上addr:https://pan. ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- K&R《C语言》书中的一个Bug
最近在重温K&R的C语言圣经,第二章中的练习题2-2引起了我的注意. 原题是: Write a loop equivalent to the for loop above without us ...
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数
1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; in ...
- PL真有意思(二):程序设计语言语法
前言 虽然标题是程序语言的语法,但是讲的是对词法和语法的解析,其实关于这个前面那个写编译器系列的描述会更清楚,有关语言语法的部分应该是穿插在整个设计当中的,也看语言设计者的心情了 和英语汉语这些自然语 ...
随机推荐
- 权威技术社区InfoQ列网易数帆为年度最有价值技术团队,技术实力获广泛认可
近日,权威技术社区InfoQ公布数字化转型技术服务商网易数帆为2020年最有价值技术团队,并被授予"最佳技术社区驱动力奖",认可网易数帆在技术领域的突出成就和实力. Inf ...
- [oeasy]python0096_游戏娱乐行业_雅达利_米洛华_四人赛马_影视结合游戏
游戏娱乐行业 回忆上次内容 游戏机行业从无到有 雅达利 公司 一枝独秀 并且带领 行业 发展起来 雅达利公司 优秀员工 乔布斯 在 朋友 帮助下完成了<pong> Jobs 黑了 Woz ...
- oeasy教您玩转vim - 5 - # 插入模式
插入模式 回忆上节课内容 我们总结了,模式切换的方式 命令模式 Normal mode 底线命令行模式 Command mode 帮助文件的正确打开方式 :h 在文档中使用鼠标 set mouse=a ...
- CSP2023
坐标HA 背景 NOIP都打完了,CSP-S都没写游记,所以来补一篇(逃-- 正文 Day 7*-1 考前一周停课集训,被whk老师怒斥不务正业,悲QWQ. Day 0 周五得到年级第一zyx的鼓励, ...
- iOS开发基础136-防暴力点击
要在Objective-C中创建一个高度可复用的工具类,以防止按钮的暴力点击,并且使用切面编程(AOP)的方式,我们可以考虑使用Aspects这个库来实现方法的拦截.以下是具体的实现步骤: 第一步:引 ...
- ComfyUI插件:IPAdapter_plus(新版)节点
ComfyUI插件:IPAdapter_plus(新版)节点 前言: 学习ComfyUI是一场持久战,而IPAdapter_plus是常用且便捷有效的风格迁移模型,可以通过提供参考图像去进行图像的生成 ...
- scratch少儿编程卡通三国背景72张全套素材包【免费下载】
scratch卡通三国题材背景图片,共72张,让你轻松打造scratch三国世界! 免费下载地址:https://www.xiaohujing.com.cn 这套背景图片以卡通风格呈现,色彩鲜艳.造型 ...
- Hadoop 部署
hadoop部署步骤: 环境rhel8.2 1.配置主机网络信息 使物理机能和主机ping通 使用secureCRT与虚拟连接 设置网卡(dhcp) [root@maoqiyang ~]# nmcli ...
- linux环境部署搭建流程
linux环境部署搭建流程 1,ubuntu/centos系统安装 2,ip网络配置 3,路由和防火墙 4,时间同步服务器 5,ssh协议配置(Windows安装xshell/secureCRT) 6 ...
- Mysql查询几天前或几天后的日期
查询 当天±天数 后的日期."-14"表示14天前的日期,"14"表示14天后的日期 NOW()精确到时分秒,CURDATE()只精确到天 #查询今天 1.se ...