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. char s[]和 char* s是等价的

s是字符数组的起始地址

3. 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
上一篇:力扣 无重复字符的最长子串


下一篇:Java 未省略括号的中序表达式转后序表达式