C语言——指针

指针类型的长度:

printf("%d %d\n", sizeof(double), sizeof(double *));    //所有类型的指针都是4,而sizeof(char)是1,sizeof(int、float)都是4

动态分配数组内存大小:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n = 1;
    scanf("%d", &n);
    int *p = (int *) malloc(n * sizeof(int));    //动态创建一维数组
    p[n - 1] = 100;
    printf("%d\n", p[n - 1]);
    free(p);    //free是malloc函数的逆过程,用于释放掉给指针分配的空间
    return 0;
}

int m, n;
scanf("%d %d", &m, &n);
int *p = (int *) malloc(m * n * sizeof(int));    //创建二维数组
p[m * n + n] = 100;
printf("%d\n", p[m * n + n]);
free(p);

操纵指针:

*p++;//由于没有打括号,所以运算符*、++都是操纵变量p
若p为一个指针,那么p[i]:实质上,C的编译器会将p[i]解析成*(p+i),使得表达式更为简单

指向函数的指针(函数式编程):

#include <stdio.h>
int func(int a)
{
    return -1;
}
int function(int a)
{
    return a;
}
int main()
{
    int (*p1)(int) = func;
    printf("%d\n", p1(1));
    p1 = function;
    printf("%d\n", p1(100));
}

用指针删除字符串中指定字符(除了指针版,还有数组版、下标指针版:*pi,*pj):

char *delChar(char *s, char c)
{
    int i, j;//在遇到c之前,j = i;遇到c之后,j = i - 1;
    for(i = 0, j = 0; *(s + i) != 0; i++)
    {
        if(*(s + i) != c)
        {
            *(s + j) = *(s + i);
            j++;
        }
    }
    *(s + j) = '\0';
    return s;
}

求一个短语中,单词的个数:

int WordCount(char *p)
{
    int n = 0;
    for(; *p != '\0'; p++)
    {
        if(*p == ' ') continue;//È¥µôÿ¸öµ¥´ÊÇ°ÃæµÄ¿Õ¸ñ
        if(isalpha(*p))
        {
            n++;
            for(; *p != '\0' && isalpha(*p); p++);
        }
    }
    return n;
}

内存管理:

函数<stdlib.h>:

  • void *calloc(int num, int size);
  • void free(void *address);
  • void *malloc(int num);
  • void *realloc(void *address, int newsize);

 

posted @ 2017-05-15 12:53  不抛弃,不放弃  阅读(265)  评论(0编辑  收藏  举报