char **p, char a[16][8]; 问:p=a 是否会导致程序在以后出现问题?为什么?
生活随笔
收集整理的這篇文章主要介紹了
char **p, char a[16][8]; 问:p=a 是否会导致程序在以后出现问题?为什么?
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
int (*v)[10];
在 Visual C++ 里面不能與 int **v 等同起來。
舉個(gè)例子:
int **p;
int (*v)[10];
int a[10][10];
如果寫 v = a 是可以的。
如果寫 p = a 將會(huì)引起一個(gè)類型不匹配的編譯錯(cuò)誤。
二級(jí)指針(int **p)需要自己指向一個(gè)一級(jí)指針,而二維數(shù)組則
不是這樣。編譯器為了節(jié)省空間和時(shí)間,沒有采用指針指向指針的方法,而是將數(shù)組現(xiàn)
行地存放在內(nèi)存中。這樣一來,int (*v)[10] 也就成了 C 語(yǔ)言的一種特殊語(yǔ)法,它只
能表示 v 指向第一維具有 10 個(gè)元素的二維數(shù)組的頭部。這樣 v 的類型與 a[10][10]
正好匹配,v 的類型與 b[5][10](比如說定義了 b)也是匹配的。但是 v 不能匹配
c[5][5] 因?yàn)?c 的內(nèi)存分布中每隔 5 個(gè)元素就把第二維的下標(biāo)加一。
可以這樣寫,呵呵……#include<stdio.h>
#include<stdlib.h>
int main()
{
? ? ? ? //local declarations
int **pointer;
int count;
int i;
int *p;
? ?
//statements
??pointer= (int **)malloc (sizeof(int *) *10);
??for( count=0; count < 10; count++ )
? ?? ?pointer[count]=(int *)malloc(sizeof(int) * 10);
??
??for(count=0; count< 10; count++)
? ? ? ? {
? ? ? ?? ? p=*(pointer+count);
? ?? ? for(i=0; i<10; i++)
? ? ? ?? ?? ?? ???*(p+i)=count;
? ? ? ? }//for
??for(count=0; count<10; count++)
? ? ? ? {? ?
? ? ? ? ? ? ? ? ? ? ? ? for(i=0;i<10;i++)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???printf("%6d",*(*(pointer+count)+i));
? ? ? ? ? ? ? ? ? ? ? ???printf("\n");??
? ? ? ? }//for
return??0;
}//main 復(fù)制代碼 這樣 pointer 也可以作為二維數(shù)組來使用,但是每?jī)蓚€(gè)下標(biāo)相鄰的元素在內(nèi)存中的地址不一定
是相鄰的,而且還有 10 個(gè)一維指針占用內(nèi)存空間作為橋梁。
?char **str1=NULL;
?char *x="zhang";
?str1=&x;
在 Visual C++ 里面不能與 int **v 等同起來。
舉個(gè)例子:
int **p;
int (*v)[10];
int a[10][10];
如果寫 v = a 是可以的。
如果寫 p = a 將會(huì)引起一個(gè)類型不匹配的編譯錯(cuò)誤。
二級(jí)指針(int **p)需要自己指向一個(gè)一級(jí)指針,而二維數(shù)組則
不是這樣。編譯器為了節(jié)省空間和時(shí)間,沒有采用指針指向指針的方法,而是將數(shù)組現(xiàn)
行地存放在內(nèi)存中。這樣一來,int (*v)[10] 也就成了 C 語(yǔ)言的一種特殊語(yǔ)法,它只
能表示 v 指向第一維具有 10 個(gè)元素的二維數(shù)組的頭部。這樣 v 的類型與 a[10][10]
正好匹配,v 的類型與 b[5][10](比如說定義了 b)也是匹配的。但是 v 不能匹配
c[5][5] 因?yàn)?c 的內(nèi)存分布中每隔 5 個(gè)元素就把第二維的下標(biāo)加一。
可以這樣寫,呵呵……
是相鄰的,而且還有 10 個(gè)一維指針占用內(nèi)存空間作為橋梁。
?char **str1=NULL;
?char *x="zhang";
?str1=&x;
總結(jié)
以上是生活随笔為你收集整理的char **p, char a[16][8]; 问:p=a 是否会导致程序在以后出现问题?为什么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QA-3:
- 下一篇: python网络爬虫实战——实时抓取西刺