指针
指针与数组
指针与字符串
指针与函数??
指针与数组
1.数组名:数组元素首地址
eg:
int array[3]={1,3,6};
这里array 恒等于&array[0]
2.int *p = a;
int *p = 0;
int a[]={0};
3.int *p = a;
均指向数组的首地址
*p是? *(p+1)是?(*p)+1是?
*(p+1)决定向下移动几个字节是类型
4.指针可以当数组名使用
p[1] = 3;
恒等于a[1] ;恒等于*(p+1);恒等于*(a+1)
5.指针与数组的区别
1)所占空间不同
指针:只与操作系统位数有关
数组:与元素个数和类型有关
2)数组名是常量地址, 不能重指向(不能赋值)
指针可以重指向
用指针能否算出数组元素个数?
答: 字符串,字符数组 可以 以’\0’ 结束 ,其他类型不可以
通过指针计算字符串的长度
char string[10] = "iPhone";
char *p4 = string;
// *(p+1) = ‘v‘; //操作单个字符
printf("%s" ,string);
printf(" %s",p4+1); //操作整个字符 打印 phone
int count = 0;
while ( *(p4 + count)!=‘\0‘) {
count++;
}
printf(" %d “,count);
int countn =sizeof(string)/sizeif(char);
//如何全部输出字符串
char *strings[3] = { “iOS”,”Android”,”Win8”};
for(int i = 0; i < 3; i++)
{
printf(“%s”,strings[i]);
}
注意:可以用字符修改字符数组(可以调整位置等),但不可修改常量字符串
即iOS中单个的字符
指针与函数 与结构体
//使用指针查找学员数组中性别为男的学员,成绩增加10分,超过100分的记为100分
typedef struct{
char name[20];
char gender;
char namel[20];
float score;
} Student;
void manStudents(Student *mstu, int count);
void manStudents(Student *mstu, int count)
{
for (int i = 0; i < count; i++) {
if ((mstu+i)->gender == ‘m‘) {
((mstu+i)->score)=((mstu+i)->score)+10;
if (((mstu+i)->score) > 100) {
(mstu+i)->score = 100;
}
}
}
}
宏
#define MUL(A,B) ((A)*(B))
总结
1)指针变量是存放地址的变量,指针变量的赋值,意味着指针的重指向
2)数组名代表数组的首地址,而且是常量地址,不可以修改
3)函数调用时,形参拷贝了实参的值