《C程序设计》指针部分学习记录-易混点

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语言设计(第四版)   谭浩强

原文地址:https://www.cnblogs.com/QQ2962269558/p/13279332.html