1 优先级
1 int a[10], *p = a;
2 *p++;//先实现*p运算,再使p自增1
3 *(p++);//先实现*p运算,再使p自增1
4 *(++p);//先实现自增1,再
2 数组名是常量,不能对其进行赋值
1 int a[4] = {1,2,3,4};
2 int b = 0;
3 b = *(a++);//非法,数组名a代表数组首元素地址,是一个指针型常量
4 b = *(a + 1);//合法
3 指向多维数组元素的指针变量
1 int (*p)[4];//此时p只能指向一个包含4个元素的一维数组
2 score[3][4] = {{65,67,70,60},{80,87,90,81},{90,99,100,98}};
3 p = score;//合法
4
5
6 int (*p)[4];//此时p只能指向一个包含4个元素的一维数组
7 score[4] = {65,67,70,60};
8 p = score;//非法
9 p = &score;//合法
4 指针数组
1 int *num[5];//这个数组存放的都是int型地址
2
3 int main(int argc, char *argv[])//指针数组作为main函数的形参
4 {
5 }
6 //数组中每一个元素(其值为指针)指向命令行中的一个字符串
5 堆区与栈区
全局变量和局部变量都存放在栈区;
用malloc开辟的空间都在堆区。
疑问:堆区也是先进后出吗?
6 void指针类型
1 void *malloc(unsigned int size);//void * 表示无类型指针
2 void *p3;//p3为无类型指针变量(基类型为void型)
3
4 int a = 3;
5 void *p3;
6 p3 = &a;
7 printf("%d",*p3);//错误,p3是无指向的,不能指向a
8 //p3 = &a; 赋值后p3得到a的纯地址,但并不指向a,不能通过*p3输出a的值
参考
C语言设计(第四版) 谭浩强