Part1:
数组函参 字符指针 基本用法 常量字符串
我们把要把数组传入函数时,其实传入的是一个地址,对地址内的内容进行修改,对其进行sizeof的话得到的不是数组所占空间,而是指针所占的空间。
#include<stdio.h>
void mylen(int arr[]) {
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d", sz);
}
int main(void) {
int arr[10] = { 0 };
mylen(arr);
return 0;
}
//其结果为1/2
字符指针:我们一般是先定义一个字符a,再定义一个字符指针变量指向a。
char test='a';
char* p=&test;
或者定义一个字符数组,再定义一个指针变量指向它。
char arr[]="abcdef";
char* p=arr;
如果我们直接定义一个指针变量,再将一个字符或字符串赋给指针变量,其实赋的是第一个字符的地址。这样的字符串被称为常量字符串。
char* p="abcdef";
为什么称之为常量字符串呢?按照我们之前的理解,我们有一个指向首字符的指针是不是可以对其进行修改呢?
#include<stdio.h>
int main(void) {
char* p = "abcdef";
*p = 'W';
printf("%s", p);
}
这里运行是程序是会崩溃的。但是编译器并不会报错,为了解决这个问题,我们再定义时可以加上const
const char* p="abcdef";
Part2:
常见错误 比较字符数组 常量空间
我们在做题目的时候时常遇见比较两个数组的判断条件,这个时候如果直接比较数组名,那其实是在比较地址。
char arr[] = "abcdef";
char arr1[] = "abcdef";
if(arr==arr1)//地址并不相同
常量字符串,如果两个常量字符串相同,那么系统是不会开辟两块空间去存放的,这个时候如果用两个指针指向它,其存放的地址是相同的。
char* p = "abcdef";
char* q = "abcdef";
if(p==q)//由于常量相同,p与q的值相同