数组 存放一连串类型相同的数据,在c语言中必须声明数组的长度
数组名 可以表示数组首地址,数组的首个元素,整个数组。
一维数组
定义: 类型说明符 数组名 [常量表达式]
引用:数组名[下标]
初始化:类型说明符 数组名[常量表达式]={值, 值, 值, 值...... 值 };
数组名 可以表示数组首地址,数组的首个元素,整个数组。
一维数组
定义: 类型说明符 数组名 [常量表达式]
引用:数组名[下标]
初始化:类型说明符 数组名[常量表达式]={值, 值, 值, 值...... 值 };
二维数组
定义:类型说明符 数组名[常量表达式一][常量表达式二]; 在c语言中二维数组使按行排列的
引用:数组名[下标][下标];
初始化:
指针:是一个地址,在OC中执政都占8字节,在c语言中是不定的
指针变量 :是存放地址的变量,是专门用来存放地址的
变量的指针就是变量的地址
存放变量地址的变量是指针变量
指针定义:基类型 * 指针变量名;
下面两个语句的作用相同
1)i = 6;
2)*i _pointer = 6; //将6赋给指针变量i_pointer,指针变量名是i_pointer 而不是*i_pointer;
指针的运算符:
1)&:取地址运算
2)*:取指针所指向的内容
指针变量与普通变量的区别
普通变量只能存取数据,指针变量有存取数据和对所指向的内存空间进行操作两个功能;
易错点
int a = 100;
int b = 10;
int * pointer_1;//定义指向整型变量的指针变量(int *)pointer_1
int * pointer_2;
pointer_1 = &a;//将a的地址赋值给指针变量pointer_1
pointer_2 = &b;
NSLog(@"a = %d,b = %d",a,b);
NSLog(@"*ponter_1 = %d,*pointer_2 = %d");//*pointer_1,*pointer_2 就是变量a和b本身,即指向a和b的内容100,10
int i,j;
int * pointer_1;//(int *)pointer_1 基类型int指明该指针类型是指向int类型的
int * ponter_2;
指针数组(实质是数组,里面存放着指针变量,该指针指向数组元素的地址)
(1)int a[10];//定义a为包含10个整型数据的数组
(2)int * p;//定义指向整型变量的指针p
(3)p = &a[0];//指针赋值,将a[0]元素的地址赋给指针变量p,这样p就指向了a数组的第0号元素
(2)和(3)两句等价于 int * p = &a[0];
注意:
1)p+i和a+i就是a[i]的地址,即它指向a数组的第i个元素。
2)*(p+5)、*a(a+5)和a[5]三者是等价的,例如,计算a[3]的地址,假设数组是float型的,数组a的首地址为1000,则a[3]的地址:1000+3*4=1012;
3)指针数组的指针变量也可以带下标,如p[i]与*(p+i)等价;
4)*(p++)和*(++p)作用不同。前者是先取*p的值,然后使p的值加1,后者是先使p加1,在取*p。若p的初值为a(即&a[0]),则*(p++)为a[0],而*(++p)为a[1];
引用一个数组元素有两种方法
1)下标法:a[i];
2)指针法 *(a+i)或者*(p+i)
面试点
区别指针常量和常量指针
int const *p;
const int *p;
int * const p;
三个哪些使指针常量,哪些使常量指针
小妙招: 以*为界画一条竖线,const在*右边的为常量指针,const在*右边的是指针常量。
数组指针(实质是指针,)
常量指针:是指针,指向的内容不可变,但是其指向可变 int const *p; (const int *p;)
指针常量 :是常量,实质上就是指针的指向不能改变,但是指向的里面的内容使可变的。
函数指针:
指针的指针:指针的指针指向指针变量的地址 ;
字符串指针:
结构体
定义 : struct 结构体名{成员列表};
结构体变量:
例如
方式一: 先定义结构,在说明结构体变量
方式三:在定义结构类型的同事说明结构变量
作用域-全局
生命周期:贯穿整个程序
static修饰的变量只能被初始化一次
const关键字
用量修饰不允许被改变的变量。
定义:类型说明符 数组名[常量表达式一][常量表达式二]; 在c语言中二维数组使按行排列的
引用:数组名[下标][下标];
初始化:
指针:是一个地址,在OC中执政都占8字节,在c语言中是不定的
指针变量 :是存放地址的变量,是专门用来存放地址的
变量的指针就是变量的地址
存放变量地址的变量是指针变量
指针定义:基类型 * 指针变量名;
下面两个语句的作用相同
1)i = 6;
2)*i _pointer = 6; //将6赋给指针变量i_pointer,指针变量名是i_pointer 而不是*i_pointer;
指针的运算符:
1)&:取地址运算
2)*:取指针所指向的内容
指针变量与普通变量的区别
普通变量只能存取数据,指针变量有存取数据和对所指向的内存空间进行操作两个功能;
易错点
int a = 100;
int b = 10;
int * pointer_1;//定义指向整型变量的指针变量(int *)pointer_1
int * pointer_2;
pointer_1 = &a;//将a的地址赋值给指针变量pointer_1
pointer_2 = &b;
NSLog(@"a = %d,b = %d",a,b);
NSLog(@"*ponter_1 = %d,*pointer_2 = %d");//*pointer_1,*pointer_2 就是变量a和b本身,即指向a和b的内容100,10
int i,j;
int * pointer_1;//(int *)pointer_1 基类型int指明该指针类型是指向int类型的
int * ponter_2;
指针数组(实质是数组,里面存放着指针变量,该指针指向数组元素的地址)
(1)int a[10];//定义a为包含10个整型数据的数组
(2)int * p;//定义指向整型变量的指针p
(3)p = &a[0];//指针赋值,将a[0]元素的地址赋给指针变量p,这样p就指向了a数组的第0号元素
(2)和(3)两句等价于 int * p = &a[0];
注意:
1)p+i和a+i就是a[i]的地址,即它指向a数组的第i个元素。
2)*(p+5)、*a(a+5)和a[5]三者是等价的,例如,计算a[3]的地址,假设数组是float型的,数组a的首地址为1000,则a[3]的地址:1000+3*4=1012;
3)指针数组的指针变量也可以带下标,如p[i]与*(p+i)等价;
4)*(p++)和*(++p)作用不同。前者是先取*p的值,然后使p的值加1,后者是先使p加1,在取*p。若p的初值为a(即&a[0]),则*(p++)为a[0],而*(++p)为a[1];
引用一个数组元素有两种方法
1)下标法:a[i];
2)指针法 *(a+i)或者*(p+i)
面试点
区别指针常量和常量指针
int const *p;
const int *p;
int * const p;
三个哪些使指针常量,哪些使常量指针
小妙招: 以*为界画一条竖线,const在*右边的为常量指针,const在*右边的是指针常量。
数组指针(实质是指针,)
常量指针:是指针,指向的内容不可变,但是其指向可变 int const *p; (const int *p;)
指针常量 :是常量,实质上就是指针的指向不能改变,但是指向的里面的内容使可变的。
函数指针:
指针的指针:指针的指针指向指针变量的地址 ;
字符串指针:
结构体
定义 : struct 结构体名{成员列表};
结构体变量:
例如
方式一: 先定义结构,在说明结构体变量
struct student
{
int num;
char name[20];
char sex;
};
struct student boy1,boy2;//声明两个结构体变量boy1,boy2
方式二:使用宏定义使一个符号常量来表示一个结构类型
#define STU struct stu
STU
{
int num;
char name[20];
char sex;
}
STU boy1,boy2; // 声明两个 boy1,boy2 为 STU 结构类型方式三:在定义结构类型的同事说明结构变量
struct student
{
int num;
char name[20];
char sex;
}boy1,boy2;方式四:直接说明结构变量
struct
{
int num;
char name[20];
char sex;
}boy1,boy2;
结构变量成员的表示方法:结构变量名.成员名 boy1.num;boy.sex;
结构变量赋值:boy1.num = 102;boy1.name = "Elena";
结构变量的初始化:......}boy1,boy2={102,"Elena",'F'};
作用域-全局
生命周期:贯穿整个程序
static修饰的变量只能被初始化一次
const关键字
用量修饰不允许被改变的变量。