第六章 指针(2)

初始化指针

int *p = NULL; //若不知道指针该指向何地址时,将其初始化为NULL

当指针指向NULL时,不要用给指针赋值*

int a = 5;
int *p = &a;
p = NULL;
*p = 2; //会报错

指针运算

int main() {
	int arr[5] = {1,2,3,4,5};
	int i = 0;
	int size = sizeof(arr)/sizeof(arr[0]);
	int *p = arr;
	for(i = 0;i < size;i++) {
		printf("%d ", *p);
		p++;
	}
	return 0;
}
int main() {
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	printf("%d\\n", &arr[9]-&arr[0]);
	return 0;
}

结果:9。指针-指针得到的是两个指针中间的元素个数

【例】用指针-指针求字符串长度(双指针)

int my_strlen(char* ch) {
	char* start = ch;
	char* end = ch;
	while(*end != '\\0') {
		end ++;
	}
	return end-start;
}

int main() {
	char ch[] = "bit";
	int i = my_strlen(ch);
	printf("%d", i);
	return 0;
}

标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较