1、指针:任何指针都是4个字节
p[i]=[p+i]
intp p+1==>p向后挪4个字节
*:解引用 []:自带解引用
2、&arr+1;//代表加了整个数组
3、数组名有两种情况代表的是整个数组:
sizeof(arr)//整个数组的字节大小
&arr+1;//表示数组最后一个元素的后面
4、访问数组当中元素的方法:
(1) 可以通过下标去访问
(2)通过指针的形式访问:
int arr[5]={1,2,3,4,5};
arr[0];
int p=arr;//首元素的首地址(1)
int a=(p+3);//代表第4个元素(4)
printf("%d\n",&arr[0]);//arr[0]的地址
printf("%d\n",arr);//首地址
(3)/sizeof(arr[5]);
int a = 10;
sizeof(a++);
int b[10] = {};/
//相同数据类型的集合
5、字符数组:
(1)
char crr[5]={‘a’,‘b’,‘c’,‘d’};//字符数组,用单引号
//5个元素,差一个,就默认以\0结尾,不差则没有
(2)
char ch1 = 0x00;//0
char ch3 = 0;//0
char ch4 = ‘\0’;//0
char ch2 = ‘0’;//48,代表字符0
6、字符串和字符数组:
(1)
char crr[5] = {‘a’,‘b’,‘c’,‘d’,‘e’};//字符数组 5
char crr2[5] = “abcd”;//字符数组 默认会加\0 5
//注意:char crr2[5]=“abcde”;//错误,字符串末位必须是\0(默认会加)
char crr3[] = "abcdef";// 长度为7
char crr4[10] = "abcdef";//10
//crr4[0] = 'g';
//char crr5[10] = crr4;//error错误,数组的整体赋值只有一次机会,在初始化时
//char *const str = "tulun";//默认会有一个\0
//printf("%s\n",str);
//*(str+1) = ‘g’;//错误,"tulun"存储在readonly段,不能修改
//字符串不能被修改
7、%s----->遇到\0才会停止
Strlen------>字符串的长度,但不包括\0,遇到\0才会停止
char str[100] = "abcdef";
char *str2 = "abcdef";
char str3[] = "abcdef";
char str4[100] = "abcdef\0xyz";
char *str5 = "abcdef\0xyz";
char str6[] = "abcdef\0xyz";
char str7[] = "abcdef\n\0";
char *str8 = "abcdef\n\0";
printf("%d,%d\n",sizeof(str),strlen(str));// 100,6
printf("%d,%d\n",sizeof(str2),strlen(str2));//4,6
printf("%d,%d\n",sizeof(str3),strlen(str3));//7,6
printf("%d,%d\n",sizeof(str4),strlen(str4));//100,6
printf("%d,%d\n",sizeof(str5),strlen(str5));//4,6
printf("%d,%d\n",sizeof(str6),strlen(str6));//11,6
printf("%d,%d\n",sizeof(str7),strlen(str7));//9,7
printf("%d,%d\n",sizeof(str8),strlen(str8));//4,7
//注意:char crr[5]={'a','b','c','d','e'};
printf("%d,%d\n",sizeof(crr),strlen(crr));//5,不打印(没有\0,停不了)
经典例题:连续子数组的最大和:
法一:
int MaxNum(int *arr,int len)
{
assert(arr != NULL && len > 0);
int max = 0x80000000;
int sum = 0;
for(int i = 0; i < len;i++)
{
sum = 0;//第二趟的时候
for(int j = i;j < len;j++)//O(n^2)
{
sum += arr[j];//10 9 18 -82
if(sum > max)
{
max = sum;//10 18
}
}
}
return max;
}
法二(经典解法):
int MaxNum2(int *arr,int len)
{
assert(arr != NULL && len > 0);
int max = 0x80000000;//先定义成最小的一个数
int sum = 0;
for(int i = 0; i < len;i++)
{
if(sum <= 0)
{
sum = arr[i];
}
else
{
sum += arr[i];
}
if(sum > max)
{
max = sum;
}
}
return max;
}
Ok,今天就分享到这里啦,晚安~