C 指针区分

作者: zcwfeng | 来源:发表于2021-04-16 00:49 被阅读0次

看下如下各种的区别:

//int *p
//int *p[n]    指针数组
//int (*p)[n]   数组指针
//int *p() 函数返回值
//int (*p)() 函数指针
//int **p 指针的指针
// 常量指针   const char *p;   char const *p; 指针的指向可以修改,指向的值不可以修改
// 指针常量   char *p const c;  指向的地址不可以修改

数组指针例子:

int array[] = {1, 2, 3, 4, 5};
int (*ptr_array)[5] = &array;
int *p = NULL;
int i = 0;
for (i = 0; i < 5; i++) {
    printf("array[%d]=%d, *(array+%d)=%p\n", i, array[i], i, *(ptr_array + 1));
    printf("&array[%d]=%p, array+%d=%p\n", i, &array[i], i, array + i);

}

for (p = array; p < array + 5; p++) {
    printf("p=%p,*p=%d\n", p, *p);
}
  -> 二维数组

int arr[][3] = {
        {1,  2,  3},
        {4,  5,  6},
        {7,  8,  9},
        {10, 11, 12}
};
int (*ptr_arr)[3] = arr;

printf("%d\n", *(*(ptr_arr + 1) + 1));
printf("%d\n", arr[1][1]);

指针数组:

int *color[] = {"red", "green", "blue"};
int i;
for (i = 0; i < 3; i++) {
    puts(color[i]);
    printf("color[%d]=%p\n", i, &color[i]);
    color[i] = "colors";
    printf("color[%d]=%p\n", i, &color[i]);
}

查找字符串的例子:

    int find(const char *src, char ch, char **ret) {
        char * index = (char *)src;
        while (*index){
            if(*index == ch){
                *ret = index;
                return 1;
            }
            index ++;
        }
        return 0;
    }

    ->  在main里面测试调用 双指针
    char zero[] = "jiangde shenme laji chengdu";
    char *ret = NULL;
    if(find(zero,'l',&ret)){
        printf("%s\n",ret);
    }

数组名字相当于指针:

void test5(int array[]){
    printf("%d size\n", sizeof(array));

    array[0] = 100;
    printf("%d size\n", sizeof(array));
}

void test6(int *array){
    printf("%d size\n", sizeof(array));

    array[0] = 100;
    printf("%d size\n", sizeof(array));

}
-> 测试调用
int arr[5] = {1,2,3,4,5};
test6(arr);
printf("%d\n",arr[0]);

函数指针:

void test7(int n){
    printf("函数指针:%d\n",n);
}
-> 调用
void (*p)(int);
p = &test7;
p(100);

回调小例子:

int call(int i,int j){
    return i+j;
}
int test8(int a,int b,int (* callback)(int,int)){
    return (callback(a,b));
}
-> 调用
printf("function callback:%d\n",test8(1,2,call));

相关文章

  • C 指针区分

    看下如下各种的区别: 数组指针例子: 指针数组: 查找字符串的例子: 数组名字相当于指针: 函数指针: 回调小例子:

  • 值传递、地址传递的笔记

    在C语言中,理解值传递、地址传递和引用传递非常重要,首先,我们得来区分一下指针变量、指针地址、指针的值之间的关系。...

  • C语言

    C 指针、指针变量、函数指针、指针函数、指针数组、数组指针、C 数组

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • C/C++中二维数组、行指针/数组指针、指针数组、二级指针的区分

    看看他们的定义: 二维数组: int matrix[3][4]; 行指针/数组指针: int (*m)[4]; 指...

  • 学习笔记3(指针运算,函数参数与指针,数组指针,二级指针)

    一、指针运算 二、数组与指针 三、指针和函数参数 java中: C/C++中: 四、指针数组 五、 二级指针 六、...

  • C++知识点

    C++基本方法: C++ memcpy C++基本特性: C++引用(vs指针) C++指针 C++封装: 将...

  • 再学C语言之指针要点

    C之字符数组 C之指针引用字符串 C语言之数组指针 数组指针:首先它是一个指针,它指向数组指针数组:首先它是一个数...

网友评论

    本文标题:C 指针区分

    本文链接:https://www.haomeiwen.com/subject/lzarrktx.html