数组指针
int *a[2]包含指向int指针的数组,大小为2
数组
考虑a[3][2]={{1,2},{3,4},{5,6}}
,a, a[0], &a[0][0], *a
值(假设为0
)是一样的。
a+1
与*(a+1)
的值都为8,不过涵义不一样,a+1
是行指针,间隔为8 a+1 - a = 8
,*(a+1)
是列指针,每次偏移增加4 *(a+1)+1-*(a+1)=4
。
可以认为a[1]
与*(a+1)
等同,那么就有a[1]+1
和*(a+1)+1
一样指向第二行第二列。*(a[1]+1)=4
。另外,a
行指针,*a, a[0]
列指针。
&a[1], &*(a+1)
与a+1
等同,可看做行指针。
可否令int **p = a
?
如何向函数传递数组?
MinGW数组大小问题
int data[10000000]
出错。估计是stack over flow, 1Mb可包含262144个int,测试结果是最多可以分配521143个int,其大小为1.988Mb。网上说windows下gcc默认stack size为2Mb,但可以声明多个数组,每个大小都达到最大,结果不报错,那么这个stack size指的是某个函数的还是某个程序的还是某个变量的?
另外,更改stack size大小:gcc -Wl,--stack,212097152 -g main.c
有三种解决办法:
1,声明一个指针int *p;
,然后动态分配空间p=new int[10000000];
2,static int data[10000000];
3,将数组声明为全局变量
static
全局变量定义在函数外,作用域从定义处开始到程序结束。如何函数在定义之前要调用全局变量,需要在变量前面加上external
,如何其他文件要使用则需要在函数外用external
声明这个变量。
静态全局变量作用域在本文件内。
静态局部变量作用域在函数内,一旦分配后就不再改变。
如果用一个指针指向静态全局变量或者静态局部变量,然后在作用域外操作这个指针,会不会改变静态变量呢?