c语言中的数组指针,C语言中的数组和指针

1,C语言中的数组和指针aver=average(score);
2,C语言数组指针(*P)[3]准确的说是一个行指针 。它指向的是一个数组 。因为【3】定义了它是一个3列的数组,所以当P+1的时候是数组移动3个单元.注意,是数组移动,不是数组元素p指向的一个三元素的内存块,指针单位增量以内存块大小计数组名p本身就是一个指针,指向数组的首地址 , 其动态内存申请:char (*p)[10];p=(char(*)[10])malloc(sizeof(char[x][x])*N);在没有使用之前,在内存中的地址是不确定的!
3,C语言的指针数组# include void main() { void exchange(char *name[],int n); char * name[]={"January","February","March","April","May","June","July","August","September","October","November","December"}; int n; printf("请输入1-12数字"); scanf("%d",&n); exchange(name,n); } void exchange(char *name[],int n) { printf("%s\n",name[n-1]); }【c语言中的数组指针,C语言中的数组和指针】
4,c语言中的数组指针*b+1表示b[0][1],即3*(b+1)表示b[1][0],即7*(b+1)+1表示b[[1][1],即9这时b代表数组第一个元素b[0][0]的地址,*b就是b[0][0]的值1. *b+1表示b[0][0]+1的值2. *(b+1) 首先地址b加一,此时就是b[0][1]的地址,故此表达式相当于*(&b[0][1]),也就是b[0][1]的值3. *(b+1)+1 由上面知此式表示b[0][1]的值加1这里的b 是指向一个一维数组的指针,所以你这里得到的值都是内存的值,当作整形输出会变成负数另外,int b[2][3]=5 , C语言中关于指向数组的指针char str[100];char *pi=str;//相当于char *pi ;pi=str;char **ppi=*pi;//这个地方抄错了 。应为char **ppi=π定义加*表明这是指针类型的变量用的时候,就是用的指针,加*干什么 。只有取指针所指变量的值,或给指针所指的变量赋值的等涉及指针所指的变量的时候,才会又加*号,表示获取或改变,指针所指变量的值 。char x=10;*pi =x;//给指针所指的变量赋值,改变指针所指变量的值(改变*pi)。x=*pi;//取指针所指的值,取指针pi所指的变量的值(表示为*pi)赋值给x 。pippi是指针带*是取值的意思*pi=str意思是把str这个数组的首地址 放在pi所指的空间里 换句话说就是pi指向了str数组 。用pi+1之类的就可以指向数组里面的东西*(pi+1)等同于str[1]因为不管是str还是pi, ppi都指的是地址,函数调用时只需要知道参数的地址就行,然后再去取里边的值 , 而不用加上星号来传递里边的值 。首先要明白,指针数组中存储的是指针 , 也就是说两个元素都是指针,而且存放的也的确是“a”和“a”的地址,但要知道字符串和字符是两个不同的数据类型,也就是说虽然存放的地址是一样的,但指针的类型不能理解为是指向字符“a”和“a”的指针,应该是指向字符串“abcd”和“abcd”的,明白的么?因为数组的名字 , 本身就是指向数组头的指针 。另外char **ppi=*pi;是不对的吧 。这意思是给一个指针赋值一个常数,这样的赋值只允许右值为0的

    推荐阅读