C语言指针、数组和函数的一些总结

主要来自于孟宪福老师的分布式对象课程。

int a[7][8];
// a指向 a-->a[0]-->a[0][0] a[0]是第0行一维数组
// a + i --> a[i] --> a[i][0]
a[i][j];
// 等价于*( *(p + i ) + j)

定义一个函数返回7*8的数组a

int    ( *f () ) [8]
{
    int a[7][8];
    return a;

}

总结起来就是:

1. 从标识符开始 a. 定义数组,数组的元素是什么? b. 定义函数,函数的返回值是什么? c. 定义指针,指针指向谁?

2. [ ] 和 ( )的优先级大于 *

char f1(int x)
{

}
char (* b[]) ( int ) = {f1, f2, f3}
b[0] = f1;
b[1] = f2;
b[2] = f3;
char x = b[0](10);
char y = b[1](20);

一些例子:

int f()[5];  // f是一个函数,函数返回一个数组,错
int f()();//f是一个函数,函数返回一个函数,错
int (*f())[5]; //f是一个函数,函数返回一个指针,指针指向一个有五个元素的数组
int a[6]();// a是一个数组,数组元素是一个函数,错
int (*a[6] ) (); // a是一个数组,数组的元素是指针,指针指向返回类型是int的函数 

最后一个例子:

float f(int x) {   }
float (* func ()) ( int ){   return f;}
float (*p) (int );
p = fun();
float f1 =(*p)(5);

原文地址:https://www.cnblogs.com/vincent93/p/9162436.html

时间: 2024-10-09 14:02:15

C语言指针、数组和函数的一些总结的相关文章

函数指针,函数指针数组,函数返回值为函数指针

函数的名字就是函数的首地址:定义函数指针; int (*p)(int ) p为函数指针变量名字,int 为函数的返回值类型为int型:(int)为函数的形参类型为int型, 注:因为优先级所以要用(*p),否则就会p先和后面的()结合为int*p(int),意思就变为p(int)函数的返回值为int* 注:main2()函数中   int (*p[])(int ,int )  为一维数组,下面写错了, #include<stdio.h> #include<stdlib.h> int

C语言--指针数组大小

#include <stdio.h> #include <string.h> int main(void) { char *str[3]={ "Hello,thisisasample!", "Hi,goodmorning.", "Helloworld" }; char s[80]; printf("size %d\n",sizeof(char [3])); // printf("size %d

C++中的指针、数组指针与指针数组、函数指针与指针函数

C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从初学者的角度,深入浅出地详解什么是指针.如何使用指针.如何定义指针.如何定义数组指针和函数指针,并给出对应的实例演示:接着,区别了数组指针与指针数组.函数指针与指针函数:最后,对最常混淆的引用传递.值传递和指针传递做了区处. C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力.指针可以用于数组.或作为函数的参数,用来访问内存和对内存的操作,指针的使用使得C++很高效,但是指针也非常危险,使用不当会带来比较

C语言--- 高级指针2(结构体指针,数组作为函数参数)

一.结构体指针 1. 什么是结构体指针?指向结构体变量的指针     结构体:     typedef  struct stu{                          char name[20];                          char sex;                          int age;                    }Student;     Student stu1 = {"zhangsan",'m',23};  

C语言---指针变量作为函数参数

在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁.像数组.字符串.动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合.有的时候,对于整数.小数.字符等基本类型数据的操作也必须要借助指针,一个典型的例子就是交换两个变量的值.有些初学者可能会使用下面的

转:C语言指针数组和数组指针

转自网址http://c.biancheng.net/cpp/html/476.html 一.指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别.其实很好理解: 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定.它是“储存指针的数组”的简称. 数组指针:首先它是一个指针,它指向一个数组.在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.它是“指向数组的指针”的简称. 下面到底哪个是数组指针,哪个是指针数组呢: A) int

数组指针、指针数组、函数指针、指针函数 -----笔记

1.数组的四种访问方式 定义数组 a[]; 指针 *p 指向数组a; (1) 利用数组的下表进行访问 a[i]; (2) 数组名+地址的偏移量i *(a+i) (3) 利用指针 p 进行下表访问 p[i] (4) 指针p + 地址的偏移量i *(p+i) 一维数组数组名:相当于一个单指针 2. 数组指针(指针)     指针数组(数组) 函数指针(指针)     指针函数(函数)    -------->只看后边两个字就能够区分是指针还是数组或函数 _______________________

C++数组指针、指针数组、函数指针的核心概念

1.什么叫数组指针? 数组指针:一个指向一维或者多维数组的指针. 比如:int * b=new int[10];指向一维数组的指针b ; 注意,这个时候释放空间一定要delete [] ,否则会造成内存泄露,b 就成为了空悬指针.         int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二维int型数组的首地址.         注意:在这里,b2等效于二维数组名,但没有指出其边界,即最高维的元素数量,但是它的最低维数的元素数量必须要指定!就像指向

关于复杂指针数组,函数以及函数指针,数组思考

指针数组其实是数组,只不过是数组里面放着指针如int *p[],由于中括号的优先级高于星号,所以p先与中括号结合形成数组,然后再与星号结合形成指针数组,即每一个数组元素是一个指向整形数据的指针.而数组指针实际上是指向数组的指针如int(*p)[]. 同理函数指针是指向一个函数的指针,指针函数是说这个指针指向了一个函数如int(*fun)(int) ,而函数指针则意味着它是一个函数,这个函数的返回值是一个指针,如int * fun(intx).因此通过这个规律我们可以理解更深层次的更复杂的指针,

C语言指针数组(每个元素都是指针)

转载:http://c.biancheng.net/cpp/html/3246.html 注意:数组指针的区别 如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组.指针数组的定义形式一般为: dataType *arrayName[length]; [ ]的优先级高于*,该定义形式应该理解为: dataType *(arrayName[length]); 括号里面说明arrayName是一个数组,包含了length个元素,括号外面说明每个元素的类型为dataType *. 除了每个