用变量a给出下面的定义
a) 一个整型数(An integer)
b)一个指向整型数的指针( A pointer to an integer)
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r
d)一个有10个整型数的数组( An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
a)一整型数 int a;
b) 指向整型数的指针 int *a;
c) 指向指针的指针 int **a;
d) 10个整型数的指针 int a[10];
e) 有十个指针的数组 int *a[10];
f) 有十个整型数数组的指针 int (*a)[10];
g) 一个指向函数的指针 int (*a)(int);
h) 有十个指针的数组 指向一个函数 有一个整参 int (*a[10])(int);
1、int a; int * p = &a;
其中int代表基类型、*代表定义的是一个指针变量、p为指针变量内部存放的是 a的地址。
2、指针变量的赋值
常见错误:* p = &a;
(错误写法:*p = a;)指针变量不能直接赋值变量。
注意上述指针赋值也是错误的。解析:a的地址赋值给了p而不是(*p)。
正确写法:
int * p = NULL;
p = &a;
*temp = *a;(传值错误)
int **p:
解释:int * *p 其中*p代表的是代表的是定义了一种指针变量 其中 p 存放的数据是int *型的数据即存放的是地址。该地址指向的是一个int 型的数据
指针与数组的关系
指针与数组常发生在函数传参的过程中。void funcation (int *p)
在该函数中,引用的指针型变量可以在主调函数中直接输入函数名来实现。一维数组的变量们代表的就是函数的首地址。
可以通过下标运算符,使得指针达到数组下标偏移的效果。也是使用p+1的实现数组的偏移。
对于二维数组
int a[3][4]
int[4] a[3]
int[4] (*a)理解的形式可看做如此,但是在语法角度的书写方式为int (*a)[4]
指针操作指针
int **p;
结构体:结构体是用来自定义类型变量的一种方式。
我们可以使用结构体来定义一个名叫student的数据类型。
其中可以存放一些基本的类型。
struct student
{
int a;
float b;
};
在后面的调用中struct student s【10】 = {1 , 2.3};