C语言指针相关
1.char *s[]
若执行s++
,则:
2.char **s
若执行s++
,则:向后一个指针的大小(一般为4个字节)
3.char (*s)[]
则s是指向一行的指针,若执行s++
,则s会指向下一行
4.int **a
若执行a++
,则:向后一个指针的大小(一般为4个字节)
5.int *a[]
若执行a++
,则:
6.int (*a)[]
则a是指向一行的指针,若执行a++
,则a会指向下一行
- 1和2如果写在函数的形参里面,那么是等价的。
- 4和5如果写在函数的形参里面,那么是等价的。
- 如果1不是写成函数的形参,那么s就是一个常量,不能更改。
- 如果2不是写成函数的形参,那么s就是一个变量,可以更改。
- 3和6都是指向一行的指针
1 | int b[105][105]; |
1 | int b[105][105]; |
一般来说,二级指针是和指针数组相关联的,int (*a)[]
这种是和二维数组相关联的。
1 |
|
1 | 123 |
观察这段程序,问题出在哪里?
1 |
|
问题:没有声明所指向的一行有多少个元素,改为:
1 |
|
即可。
如果声明了int *a = malloc(size);
,那么之后可以用a[i]
表示*(a + i)