首页 > 代码库 > 指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针

指针与数组

指针与字符串

指针与函数??

指针与数组

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)函数调用时,形参拷贝了实参的值

 

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏