首页 > 代码库 > 指针和数组

指针和数组

指针的几个要点:

        指针的定义,赋值 要区分:

int a;

int *p = &a;

这是定义的时候初始化,即赋值

=======================

int a;

int *p;

p = &a;

定义,初始化分开,  就这里我迷惑了好久

==========================

多个(修饰符)修饰变量,看变量名先和谁结合(先看后缀)(ps:符号和变量之间的空格不要计算,和距离无关 int*和int *.......

int * p [5]    先和[ ]结合,所以p是一个数组,它的每个元素都是一个指针,

int(*p)[5]     是一个指针,这个指针指向一个有5个int元素的数组,p是数组首元素的地址

int a[3][5]={{1 2 3 4 5}{ 6 7 8 9 10}{ 11 12 13 14 15}}             (简写的)

&a             a               a[0]            

这4个都是指针,他们的地址都相同,但是他们指向的对象的空间大小不同

&a   相当于 int *p = &a     指向整个数组         60字节           

a     相当于   int (*p)[5]     指向a的首元素 即 {1 2 3 4 5 }          20字节

a[0]    相当于 int (*p)        指向a[0]的首元素 即   {1}

==================================================================

ubuntu 14.04 vim 

随意输入100个以内字符,计算各种字符有几个!(有一个语句我很自豪) @. @

#include<iostream>

using namespace std;

void fun(char *tt,int pp[])
{
	while(*(tt) != ‘\0‘)
		{
			if(*(tt)>=‘a‘ && *(tt)<=‘z‘)
			++pp[((int)*(tt))-97];
			tt++;
		}
}
int main()
{
	int pp[26]={0};
	char tt[100];
	int i=0;
	while(cin>>tt[i++])
		;
	fun(tt,pp);
	for(int j = 0;j != 26;++j)
		cout << (char)(j+97) <<":"<<pp[j]<< endl;

	return 0;
}


======================================================================================

边输入数据边分配空间的动态数组(使用3个指针相互赋值)

#include<iostream>

using namespace std;

int main()
{
	int size=2,k=1;
	int *a=new int [0];
	int *q;
	int *p;
	p=a;
	int i=0;
	while(cin>>*(a+i++))
	{
		if(i == k*size && k%2 != 0)
		{
			q = new int[++k*size];
			for(int j = 0;j != (k-1)*size;++j)
				*(q+j) = *(p+j);
			delete[] p;
			a = q;
		}
		else if(i == k*size && k%2 == 0)
		{
			p = new int[++k*size];
			for(int j = 0;j != (k-1)*size;++j)
				*(p+j) = *(q+j);
			delete[] q;
			a = p;
		}
	}
	cout<<"@.@___@.@"<<endl;
	for(int j = 0;j != i-1;++j)
		cout<<*(a+j)<<endl;



	return 0;
}


现在发现写上翻译是多么重要,,,,